[算法问题]请根据以下规则返回相关的数组

paullbm 2010-01-03 07:43:47
假设有一个不定长整型数组
int arr[]={1,2,3....22};
当指定一个数appointNum为5时
则arr分布如下:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17
18 19 20 21 22

规则说明如下:
1).当传入一个变量num为1...5时,将1...5装入数组b中做为结果(共appointNum个数据)返回;
2).当传入一个变量num为18...22时,将18...22装入数组b中做为结果(共appointNum个数据)返回;
3).当传入一个变量num为16或17时,将16...20装入数组b中做为结果(共appointNum个数据)返回;


请考虑程序的通用性(即程序能够根据不定长整型数组的变化和指定的数appointNum的变化时而自适应).

...全文
114 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
paullbm 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 shuoyan 的回复:]
请lz上传下代码,让大家学习学习,原来代码是什么,如何优化的~!谢谢lz
[/Quote]
也没啥优化的.呵呵.代码如下:
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();
}

}
}

welkinlhb 2010-01-04
  • 打赏
  • 举报
回复
用继承?
shuoyan 2010-01-04
  • 打赏
  • 举报
回复
请lz上传下代码,让大家学习学习,原来代码是什么,如何优化的~!谢谢lz
paullbm 2010-01-04
  • 打赏
  • 举报
回复
哈哈。。问题已经自己解决!!!!
crazylaa 2010-01-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 paullbm 的回复:]
引用 4 楼 crazylaa 的回复:
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个数据)返回;
已经把该说的情况基本上都遍历了。。。。
[/Quote]

。。。
(数据库查询错误!)
帮顶了。。。。
paullbm 2010-01-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ouyangyh 的回复:]
LZ分数那么高,这问题还问别人?
而且解释也不清楚
1. appointNum 是怎么分隔数组的?规则
2. 传入的 num 是指数组的索引还是数组中某个元素的值?
[/Quote]

在下希望能够找到一种可以比自己更简单的方式来实现!
答1>在规则说明中已经间接说明了.
答2>数组中某个元素的值.
paullbm 2010-01-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 crazylaa 的回复:]
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的数字看在哪个里面就输出哪个。
[/Quote]

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

已经把该说的情况基本上都遍历了。。。。
crazylaa 2010-01-03
  • 打赏
  • 举报
回复
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的数字看在哪个里面就输出哪个。
zhuwen9 2010-01-03
  • 打赏
  • 举报
回复
是有点模糊.
knightzhuwei 2010-01-03
  • 打赏
  • 举报
回复
确实讲得不清楚啊
ouyangyh 2010-01-03
  • 打赏
  • 举报
回复
LZ分数那么高,这问题还问别人?
而且解释也不清楚
1. appointNum 是怎么分隔数组的?规则
2. 传入的 num 是指数组的索引还是数组中某个元素的值?

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧