黑马程序员技术交流社区

标题: 如何实现1,2,3,4,5,6这几个数字的任意组合 [打印本页]

作者: 崔洪全    时间: 2012-11-18 08:48
标题: 如何实现1,2,3,4,5,6这几个数字的任意组合
本帖最后由 崔洪全 于 2012-12-6 08:41 编辑

今天又空,就把之前遇到的问题,都写出来了。将六个数字或字符的所有组合都求出来,并打印。
我想了很久,用for循环试了试,结果有点乱。请求帮助,谢谢。
作者: 王中利    时间: 2012-11-18 10:40
01.public class Rank {

02.        public static void main(String[] args) {

03.                int[] array = { 7, 9, 5, 8 };

04.                boolean[] isSelected = new boolean[array.length];

05.                int[] array2 = new int[array.length];

06.                for (int i = 0; i < isSelected.length; i++) {

07.                        isSelected[i] = false;

08.                }

09.                rankArray(array, isSelected, array2, 0);

10.        }

11.

12.        public static void rankArray(int[] array, boolean[] isSelected,

13.                        int[] array2, int length) {

14.

15.                if (array.length == length) {

16.                        for (int i : array2) {

17.                                System.out.print(i + ",");

18.                        }

19.                        System.out.println();

20.                        return;

21.                }

22.                for (int i = 0; i < isSelected.length; i++) {

23.                        if (isSelected[i]) {

24.                                continue;

25.                        }

26.                        isSelected[i] = true;

27.                        array2[length] = array[i];

28.                        rankArray(array, isSelected, array2, length + 1);

29.                        isSelected[i] = false;

30.                }

31.        }

32.}
你试一下!
作者: 崔洪全    时间: 2012-11-24 15:09
额。。。利哥,我只能说,我的问题没有说明白,您些的答案是输出多有的排列组合,我要的是求出所有的组合,例如
1,12,23,24,124....所有组合方式,无视排列顺序。

当然您写出的这个答案,我也很想了解,但是我没有读懂此程序,如果可以的话,希望您能给我加点注释。万分感谢。

作者: ljhheima    时间: 2012-11-24 20:46

public class Test1
{
        public static void main(String[] args)
        {
                for(int a=1;a<=6;a++)
                {
                System.out.println(a);
                for(int b=a+1;b<=6;b++)
                {
                System.out.print(a);
                System.out.print(b);
                System.out.println();
                for(int c=b+1;c<=6;c++)
                {
                System.out.print(a);
                System.out.print(b);
                System.out.print(c);
                System.out.println();
                for(int d=c+1;d<=6;d++)
                {
                System.out.print(a);
                System.out.print(b);
                System.out.print(c);
                System.out.print(d);
                System.out.println();
                for(int e=d+1;d<=6;d++)
                {
                System.out.print(a);
                System.out.print(b);
                System.out.print(c);
                System.out.print(d);
                System.out.print(e);
                System.out.println();
                }
                }
                }
                }
                }
                System.out.print("123456");
        }
}
作者: ljhheima    时间: 2012-11-24 20:46
这就是你要的答案。
作者: 崔洪全    时间: 2012-11-26 11:59
谢谢了,非常感谢
作者: ⋛⋋⊱⋋飞☠扬    时间: 2012-11-26 22:32
用你的方法 很简单的 不用乱
public class Demo {
        public static void main(String[] args) {
                //用你的方法 FOR循环  最后的结果是 的数肯定是6位数  所有每个位上的数 分别是 i6 i5 i4 i3 i2 i1
                //主要把这些数遍历出来 组合在一起就可以了 而且好理解 最后还能算出来 这样的数有多少个
                int count = 0;//计数器
               
                for (int i6 = 1; i6 <= 6; i6++) {//最外层 第6位
                        for (int i5 = 1; i5 <= 6; i5++) {
                                for (int i4 = 1; i4 <=6; i4++) {
                                        for (int i3 = 1; i3 <=6; i3++) {
                                                for (int i2 = 1; i2 <=6; i2++) {
                                                        for (int i1 = 1; i1 <=6; i1++) {//最里层 最后一位  "个位"
                                                                count++;//每打印一次 计数器+1
                                                                System.out.println(i6*100000 + i5*10000 + i4*1000 +i3*100 +i2*10 + i1);
                                                        }
                                                }
                                        }
                                }
                        }
                }
                System.out.println("一共有:" + count + "个");
               
        }
}
作者: 宫明星    时间: 2012-11-26 22:43
本帖最后由 宫明星 于 2012-11-26 22:47 编辑

我也发一个吧。
发完才发现看错需求了,算了,懒得改了。
  1. public class PaixuZuhe
  2. {
  3.          public static void perm(char[] a,int k,int n)
  4.          {
  5.                  int i;
  6.                  if(k == n-1)
  7.                  {
  8.                          for(i=0;i<n;i++)
  9.                          System.out.print(a[i] + " ");
  10.                          System.out.println();
  11.                  }
  12.                  else
  13.                  {
  14.                          for(i=k;i<n;i++)
  15.                          {
  16.                                  char temp;
  17.                                  temp=a[k];
  18.                                  a[k]=a[i];
  19.                                  a[i]=temp;
  20.                                  perm(a,k+1,n);
  21.                                  temp=a[k];
  22.                                  a[k]=a[i];
  23.                                  a[i]=temp;
  24.                          }
  25.                  }
  26.          }
  27.          public static void main(String[] args)
  28.                  {
  29.                  char ch[]={'1','2','3','4','5','6'};        
  30.                  perm(ch,0,ch.length);
  31.                                  
  32.          }
  33. }
复制代码

作者: 崔洪全    时间: 2012-12-1 11:40
宫明星 发表于 2012-11-26 22:43
我也发一个吧。
发完才发现看错需求了,算了,懒得改了。

你的代码是我想看到的另外一种结果,输出所有的排列组合,但是整篇的代码我是在是看不懂,恳请您给加点注释。。。跪谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2