java实现:从8个数中任取5个数,排列组合出所有不重复的组合,打印出来
如:12345678打印结果:12345134562345634567.....要求不重复:12345跟54321为重复。12345后面13456我只是这样举例。5个数一...
如:
12345678
打印结果:
12345
13456
23456
34567
.....
要求不重复:12345跟54321为重复。
12345 后面13456我只是这样举例。
5个数一样的就为重复数据,不管5个数的位置。 展开
12345678
打印结果:
12345
13456
23456
34567
.....
要求不重复:12345跟54321为重复。
12345 后面13456我只是这样举例。
5个数一样的就为重复数据,不管5个数的位置。 展开
4个回答
展开全部
我简单的写了一下,for循环部分应该是用方法封装的,但是有些繁琐,就没去写了,而且你的问题本身也有问题: 如果 12345跟54321为重复 ,那么
12345跟54312 算不算是重复呢? 如果12345跟54321为重复,那么也只有这2个数重复,其它所有的都不重复,你想想对不?
public static void main(String[] args) {
int [] ran = new int[8];
for (int i = 0; i < ran.length; i++) {
ran[i]=i+1;
}
Random random = new Random();
int loop = 5;
int[] save = new int[5];
int rc = 0;
while (loop > 0) {
//随即抽取数组下标
int index = random.nextInt(ran.length);
int r = ran[index];
save[rc++] = r;
ran = remove(ran, r);
loop--;
}
//随即选的5个数
for (int i = 0; i < save.length; i++) {
System.out.print(save[i]+",");
}
System.out.println("");
int count = 5*4*3*2;
String [] num = new String[count];
label:
for (int i = 0; i < save.length; i++) {
int [] a =remove(save, save[i]);
for (int j = 0; j < a.length; j++) {
int [] b =remove(a, a[j]);
for (int k = 0; k < b.length; k++) {
int [] c =remove(b, b[k]);
for (int m = 0; m < c.length; m++) {
int [] d =remove(c, c[m]);
for (int n = 0; n < d.length; n++) {
num[--count] = save[i]+""+a[j]+
""+b[k]+""+c[m]+""+d[n];
if (count==0) {
break;
}
}
}
}
}
}
for (int i = 0; i < num.length; i++) {
if (!num[i].equals("")) {
System.out.println(num[i]);
}
}
}
//去除已经产生的数,赋给新数组
static int[] remove (int[] n,int r){
int []m = new int[n.length-1];
for (int i = 0, k = 0; i < n.length; i++, k++) {
if (n[i] != r) {
m[k] = n[i];
} else {
k--;
}
}
return m;
}
12345跟54312 算不算是重复呢? 如果12345跟54321为重复,那么也只有这2个数重复,其它所有的都不重复,你想想对不?
public static void main(String[] args) {
int [] ran = new int[8];
for (int i = 0; i < ran.length; i++) {
ran[i]=i+1;
}
Random random = new Random();
int loop = 5;
int[] save = new int[5];
int rc = 0;
while (loop > 0) {
//随即抽取数组下标
int index = random.nextInt(ran.length);
int r = ran[index];
save[rc++] = r;
ran = remove(ran, r);
loop--;
}
//随即选的5个数
for (int i = 0; i < save.length; i++) {
System.out.print(save[i]+",");
}
System.out.println("");
int count = 5*4*3*2;
String [] num = new String[count];
label:
for (int i = 0; i < save.length; i++) {
int [] a =remove(save, save[i]);
for (int j = 0; j < a.length; j++) {
int [] b =remove(a, a[j]);
for (int k = 0; k < b.length; k++) {
int [] c =remove(b, b[k]);
for (int m = 0; m < c.length; m++) {
int [] d =remove(c, c[m]);
for (int n = 0; n < d.length; n++) {
num[--count] = save[i]+""+a[j]+
""+b[k]+""+c[m]+""+d[n];
if (count==0) {
break;
}
}
}
}
}
}
for (int i = 0; i < num.length; i++) {
if (!num[i].equals("")) {
System.out.println(num[i]);
}
}
}
//去除已经产生的数,赋给新数组
static int[] remove (int[] n,int r){
int []m = new int[n.length-1];
for (int i = 0, k = 0; i < n.length; i++, k++) {
if (n[i] != r) {
m[k] = n[i];
} else {
k--;
}
}
return m;
}
展开全部
昨天的回答有问题,看看这个修改的吧,应该没问题啦:
public class Test {
public static void main(String[] args) {
int data[] = {1,2,3,4,5,6,7,8};
f_1(data);
}
private static void f_1(int data[]) {
for(int i=0;i<=3;i++) {
for(int j=i+1;j<=4;j++) {
for(int k=j+1;k<=5;k++) {
for(int x=k+1;x<=6;x++) {
for(int y=x+1;y<=7;y++) {
System.out.println(data[i]+" "+data[j]+" "+data[k]+" "+data[x]+" "+data[y]);
}
}
}
}
}
}
}
运行结果:
1 2 3 4 5
1 2 3 4 6
1 2 3 4 7
1 2 3 4 8
1 2 3 5 6
1 2 3 5 7
1 2 3 5 8
1 2 3 6 7
1 2 3 6 8
1 2 3 7 8
1 2 4 5 6
1 2 4 5 7
1 2 4 5 8
1 2 4 6 7
1 2 4 6 8
1 2 4 7 8
1 2 5 6 7
1 2 5 6 8
1 2 5 7 8
1 2 6 7 8
1 3 4 5 6
1 3 4 5 7
1 3 4 5 8
1 3 4 6 7
1 3 4 6 8
1 3 4 7 8
1 3 5 6 7
1 3 5 6 8
1 3 5 7 8
1 3 6 7 8
1 4 5 6 7
1 4 5 6 8
1 4 5 7 8
1 4 6 7 8
1 5 6 7 8
2 3 4 5 6
2 3 4 5 7
2 3 4 5 8
2 3 4 6 7
2 3 4 6 8
2 3 4 7 8
2 3 5 6 7
2 3 5 6 8
2 3 5 7 8
2 3 6 7 8
2 4 5 6 7
2 4 5 6 8
2 4 5 7 8
2 4 6 7 8
2 5 6 7 8
3 4 5 6 7
3 4 5 6 8
3 4 5 7 8
3 4 6 7 8
3 5 6 7 8
4 5 6 7 8
public class Test {
public static void main(String[] args) {
int data[] = {1,2,3,4,5,6,7,8};
f_1(data);
}
private static void f_1(int data[]) {
for(int i=0;i<=3;i++) {
for(int j=i+1;j<=4;j++) {
for(int k=j+1;k<=5;k++) {
for(int x=k+1;x<=6;x++) {
for(int y=x+1;y<=7;y++) {
System.out.println(data[i]+" "+data[j]+" "+data[k]+" "+data[x]+" "+data[y]);
}
}
}
}
}
}
}
运行结果:
1 2 3 4 5
1 2 3 4 6
1 2 3 4 7
1 2 3 4 8
1 2 3 5 6
1 2 3 5 7
1 2 3 5 8
1 2 3 6 7
1 2 3 6 8
1 2 3 7 8
1 2 4 5 6
1 2 4 5 7
1 2 4 5 8
1 2 4 6 7
1 2 4 6 8
1 2 4 7 8
1 2 5 6 7
1 2 5 6 8
1 2 5 7 8
1 2 6 7 8
1 3 4 5 6
1 3 4 5 7
1 3 4 5 8
1 3 4 6 7
1 3 4 6 8
1 3 4 7 8
1 3 5 6 7
1 3 5 6 8
1 3 5 7 8
1 3 6 7 8
1 4 5 6 7
1 4 5 6 8
1 4 5 7 8
1 4 6 7 8
1 5 6 7 8
2 3 4 5 6
2 3 4 5 7
2 3 4 5 8
2 3 4 6 7
2 3 4 6 8
2 3 4 7 8
2 3 5 6 7
2 3 5 6 8
2 3 5 7 8
2 3 6 7 8
2 4 5 6 7
2 4 5 6 8
2 4 5 7 8
2 4 6 7 8
2 5 6 7 8
3 4 5 6 7
3 4 5 6 8
3 4 5 7 8
3 4 6 7 8
3 5 6 7 8
4 5 6 7 8
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我的思路是先随机在八个数里边去出五个,
再对这五个数,进行全排列,然后把所得的字符创放到set里,或者你自己写的数据结构里边(要能排序的那种),最后打印你的数据结构就行了
我不知道你的难点,是在思路上还是在全排列上?
再对这五个数,进行全排列,然后把所得的字符创放到set里,或者你自己写的数据结构里边(要能排序的那种),最后打印你的数据结构就行了
我不知道你的难点,是在思路上还是在全排列上?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
打印结果,必须是那样的么?12345后面为什么不是12346?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询