[算法问题]请根据以下规则返回相关的数组 LZ分数那么高,这问题还问别人?而且解释也不清楚1. appointNum 是怎么分隔数组的?规则2. 传入的 num 是指数组的索引还是数组中某个元素的值? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 arr.length%appointNum不为0,则二维数组外层长度arr.length/appointNum+1,数据分布0~arr.length/appointNum+1-3各appointNum个,arr.length/appointNum+1-1也是appointNum个,arr.length/appointNum+1-2是arr.length%appointNum个。传入num的数字不在arr.length/appointNum+1-2里面,直接输出这appointNum个,否则输出arr.length%appointNum个以及最后那个的前面的appointNum-arr.length%appointNum个arr.length%appointNum为0,则二维数组外层长度arr.length/appointNum,数据分布0~arr.length/appointNum-1各appointNum个传入num的数字看在哪个里面就输出哪个。 1).arr是不会由一维数组变为二维的,那种分布情况只是一种假想状态;2).arr的数据是由1开始,顺序增加上去的。个人认为:规则说明如下: 1).当传入一个变量num为1...5时,将1...5装入数组b中做为结果(共appointNum个数据)返回; 2).当传入一个变量num为18...22时,将18...22装入数组b中做为结果(共appointNum个数据)返回; 3).当传入一个变量num为16或17时,将16...20装入数组b中做为结果(共appointNum个数据)返回; 已经把该说的情况基本上都遍历了。 在下希望能够找到一种可以比自己更简单的方式来实现!答1>在规则说明中已经间接说明了.答2>数组中某个元素的值. 请lz上传下代码,让大家学习学习,原来代码是什么,如何优化的~!谢谢lz 也没啥优化的.呵呵.代码如下:public class Test { private int arrLen; private int num; private int appointNum; private int[] arr; private int[] b; public Test(int arrLen, int num, int appointNum){ this.arrLen=arrLen; this.arr=new int[arrLen]; for(int i=0;i<this.arrLen;i++){ arr[i]=i+1; } this.num=num; this.appointNum=appointNum; SetArrayB(); } private void SetArrayB(){ if(arrLen<=appointNum){ b=new int[arrLen]; for(int i=0;i<arrLen;i++){ b[i]=i+1; } }else{ b=new int[appointNum]; if((num-1)/appointNum==0){ for(int i=0;i<appointNum;i++){ b[i]=i+1; } }else if(num>(arrLen-appointNum)){ int temp=arrLen; for(int i=appointNum-1;i>=0;i--){ b[i]=temp--; } }else{ //之前主要是把这一部分的情况想复杂了 //现在已经是简化后的代码 int temp=num; while(temp%appointNum!=1){ temp--; } for(int i=0;i<appointNum;i++){ b[i]=temp++; } } } } public int[] getArrayB() { return b; } public void printArrayB(){ int lenB=b.length; System.out.print("num="+num+" -> "); for(int i=0;i<lenB;i++){ System.out.print(b[i]+" "); } System.out.println(); } public static void main(String[] args) { int arrLen=22; int appointNum=5; //根据arrLen和appointNum对各种情况数字枚举遍历 int num[]={1,5,6,15,16,17,18,22}; int numLen=num.length; for(int i=0;i<numLen;i++){ Test t=new Test(arrLen,num[i],appointNum); t.printArrayB(); } }} java读写锁问题(ReentrantReadWriteLock) 怎么避免产生相同的牌? 二分法查找算法的java实现 怎么让窗体自动随着组件的变化而变化 <bean:define 标签使用问题,请问如果对应的bean是null,如何返回一个空的bean? 如何在页面上对table进行排序 给道算法题看看哪位大侠能做出来? java float 精度 ASC与BCD码的转化 一个小问题但是我解决不了所以求助 有关随机数的问题 使用bat文件来编译和运行java程序 请高手赐教
arr.length/appointNum+1,数据分布0~arr.length/appointNum+1-3各appointNum个,arr.length/appointNum+1-1也是appointNum个,arr.length/appointNum+1-2是arr.length%appointNum个。
传入num的数字不在arr.length/appointNum+1-2里面,直接输出这appointNum个,否则输出arr.length%appointNum个以及最后那个的前面的appointNum-arr.length%appointNum个
arr.length%appointNum为0,则二维数组外层长度
arr.length/appointNum,数据分布0~arr.length/appointNum-1各appointNum个
传入num的数字看在哪个里面就输出哪个。
1).arr是不会由一维数组变为二维的,那种分布情况只是一种假想状态;
2).arr的数据是由1开始,顺序增加上去的。
个人认为:
规则说明如下:
1).当传入一个变量num为1...5时,将1...5装入数组b中做为结果(共appointNum个数据)返回;
2).当传入一个变量num为18...22时,将18...22装入数组b中做为结果(共appointNum个数据)返回;
3).当传入一个变量num为16或17时,将16...20装入数组b中做为结果(共appointNum个数据)返回;
已经把该说的情况基本上都遍历了。
在下希望能够找到一种可以比自己更简单的方式来实现!
答1>在规则说明中已经间接说明了.
答2>数组中某个元素的值.
public class Test {
private int arrLen;
private int num;
private int appointNum;
private int[] arr;
private int[] b;
public Test(int arrLen, int num, int appointNum){
this.arrLen=arrLen;
this.arr=new int[arrLen];
for(int i=0;i<this.arrLen;i++){
arr[i]=i+1;
}
this.num=num;
this.appointNum=appointNum;
SetArrayB();
}
private void SetArrayB(){
if(arrLen<=appointNum){
b=new int[arrLen];
for(int i=0;i<arrLen;i++){
b[i]=i+1;
}
}else{
b=new int[appointNum];
if((num-1)/appointNum==0){
for(int i=0;i<appointNum;i++){
b[i]=i+1;
}
}else if(num>(arrLen-appointNum)){
int temp=arrLen;
for(int i=appointNum-1;i>=0;i--){
b[i]=temp--;
}
}else{
//之前主要是把这一部分的情况想复杂了
//现在已经是简化后的代码
int temp=num;
while(temp%appointNum!=1){
temp--;
}
for(int i=0;i<appointNum;i++){
b[i]=temp++;
}
}
}
}
public int[] getArrayB() {
return b;
}
public void printArrayB(){
int lenB=b.length;
System.out.print("num="+num+" -> ");
for(int i=0;i<lenB;i++){
System.out.print(b[i]+" ");
}
System.out.println();
}
public static void main(String[] args) {
int arrLen=22;
int appointNum=5;
//根据arrLen和appointNum对各种情况数字枚举遍历
int num[]={1,5,6,15,16,17,18,22};
int numLen=num.length;
for(int i=0;i<numLen;i++){
Test t=new Test(arrLen,num[i],appointNum);
t.printArrayB();
}
}
}