给定10个数字,列出其所有组合!不能重复

banditgao 2011-04-09 12:00:58
给定10个数字,列出其所有组合!不能重复

注意是 列出,不是计算值

例如c10 6 就是有10个数字,取其中6个 做组合,不重复!

这个怎么搞?谁来点代码最好
...全文
798 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
banditgao 2011-04-09
  • 打赏
  • 举报
回复
其实题目应该改为 :给定X个数字,任意取Y个数,列出其组合,不得重复。
茫茫大海 2011-04-09
  • 打赏
  • 举报
回复

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.TreeSet;

public class Combination {
private static int NUM = 0;

public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入X个数,用逗号分割:");
String str = input.nextLine();
String[] datas = str.split(",");
System.out.println("请输入数字Y:");
NUM = input.nextInt();
if (NUM > datas.length) {
System.out.println("输入的Y必须小于等于X!");
return;
}
combine(Arrays.asList(datas));
}

private static void combine(List<String> datas) {
TreeSet<String> set = new TreeSet<String>();
for(String str : datas) {
set.add(str);
}

ArrayList<TreeSet<String>> subset = getSubset(set);

for(TreeSet<String> ts : subset) {
System.out.println(ts);
}
}

public static String[] getBinaryValue(TreeSet<String> set) {
int size = set.size();
int m = (int) Math.pow(2, size) - 1;
String[] result = new String[m + 1];
for (int i = m; i > -1; i--) {
StringBuffer sb = new StringBuffer(Integer.toBinaryString(i));
int length = sb.length();
if (length < size) {
for (int j = 0; j < size - length; j++) {
sb.insert(0, "0");
}
}
result[i] = sb.toString();
}
return result;
}

public static ArrayList<TreeSet<String>> getSubset(TreeSet<String> set) {
ArrayList<TreeSet<String>> result = new ArrayList<TreeSet<String>>();
String[] items = new String[set.size()];
int i = 0;
for (String item : set) {
items[i++] = item;
}
String[] binaryValue = getBinaryValue(set);
for (int j = 0; j < binaryValue.length; j++) {
String value = binaryValue[j];
TreeSet<String> subset = new TreeSet<String>();
for (int k = 0; k < value.length(); k++) {
if (value.charAt(k) == '1')
subset.add(items[k]);
}
if(subset.size() == NUM)
result.add(subset);
}

return result;
}
}
banditgao 2011-04-09
  • 打赏
  • 举报
回复
楼上你这是排列 不是组合
茫茫大海 2011-04-09
  • 打赏
  • 举报
回复

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class FullSort {
//将NUM设置为待排列数组的长度即实现全排列
private static int NUM = 0;

/**
* 递归算法:将数据分为两部分,递归将数据从左侧移右侧实现全排列
*
* @param datas
* @param target
*/

private static void sort(List datas, List target) {
if (target.size() == NUM) {
for (Object obj : target)
System.out.print(obj);
System.out.println();
return;
}
for (int i = 0; i < datas.size(); i++) {
List newDatas = new ArrayList(datas);
List newTarget = new ArrayList(target);
newTarget.add(newDatas.get(i));
newDatas.remove(i);
sort(newDatas, newTarget);
}
}

public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入X个数,用逗号分割:");
String str = input.nextLine();
String[] datas = str.split(",");
System.out.println("请输入数字Y:");
NUM = input.nextInt();
if(NUM > datas.length) {
System.out.println("输入的Y必须小于等于X!");
return;
}
sort(Arrays.asList(datas), new ArrayList());
}

}

网上找的!

62,615

社区成员

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

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