java题目好难啊?求大侠解答,谢谢、、 设计算法求解从集合{1...n}中选取k(k<=n)个元素的所有组合。

2025-01-06 23:55:42
推荐回答(4个)
回答1:

这是我以前写的 改的
main中注释部分是原来的,下面两句是按你的需求改的
目前是取3个元素

//列出集合的所有组合{1,2} {}{1}{2}{1,2} 这里使用数组方便取值
public class ListAll
{
public static void main(String[] args)
{
int[] arr = new int[5];
//为数组赋初值
for (int i = 0; i < arr.length; i++)
arr[i] = i + 1;

//开始递归 从下表0开始 依次取0,1,2...个元素 存到list中
// for (int i = 0; i <= arr.length; i++)
// {
// List l = new ArrayList();
// start(arr, 0, i, l);
// }
List l = new ArrayList();//
start(arr, 0, 3, l);//只去三个 就把上面的i改成3
}

private static void start(int[] arr, int index, int num, List l)
{
if (num == 0)//如果需要取的个数为0 说明取值完毕 输出 退出此次取值
{
System.out.println(l);
return;
}

for (int i = index; i < arr.length - num + 1; i++)//关键。。
{
l.add(arr[i]);
start(arr, i + 1, num - 1, l);
l.remove(l.size() - 1);
}

}

}

[1, 2, 3]
[1, 2, 4]
[1, 2, 5]
[1, 3, 4]
[1, 3, 5]
[1, 4, 5]
[2, 3, 4]
[2, 3, 5]
[2, 4, 5]
[3, 4, 5]

回答2:

看了你的题后就自己写了个测了一下、符合你的问题:
public class Test {
public static void main(String[] args) throws Exception {
//这里是随便来个数组测试
int[] arr = new int[] { 5, 6, 7, 8, 9 };
for (int i = 0; i < arr.length; i++) {//两层for循环就能解决,
for (int j = i + 1; j < arr.length; j++) {//重点是j=i+1,避免相同数重复
System.out.print(arr[i] + ", " + arr[j] + " ");
}
System.out.println();
}

}
}
//既然我回答了,那么我多问一句,你Java学了多久了?这题说真的……
你看我的代码也就那么几句吧!
我也注释了,没问题吧。
帮你搞定我也要睡觉了,明天要上班喽……

回答3:

楼上搞笑了,LZ那个只是个例子,你反而将个特例写了出来,连题目都没搞清楚。这题的意思是随便弄个数组,里面有N个数,然后要你定义个方法,方法的参数是K(这个也是自定义),然后方法根据你实际输入的参数将所有的组合列出来,返回个值给你。重点就是要写出个具有普遍性的方法。

回答4:

class Test{
public static void main(String[] args){
int[] a={1,2,3,4};
for(int i=0,i for(int j=i+1;jif(a[i]!=a[j]){
syso(a[i],a[j]);
}
}
}
}
}

//楼主是这个意思吗