LZ分数那么高,这问题还问别人?
而且解释也不清楚
1. appointNum 是怎么分隔数组的?规则
2. 传入的 num 是指数组的索引还是数组中某个元素的值?

解决方案 »

  1.   

    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的数字看在哪个里面就输出哪个。
      

  2.   


    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个数据)返回; 

    已经把该说的情况基本上都遍历了。
      

  3.   


    在下希望能够找到一种可以比自己更简单的方式来实现!
    答1>在规则说明中已经间接说明了.
    答2>数组中某个元素的值.
      

  4.   

    请lz上传下代码,让大家学习学习,原来代码是什么,如何优化的~!谢谢lz
      

  5.   

    也没啥优化的.呵呵.代码如下:
    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();
    }

    }
    }