char[] c = {a,b,c,d};for (int i = 0; i < 4; i++){
  System.out.println(c[i]);
  for (int j = i+1; j < 4; j++){
    System.out.println(c[i] + c[j]);
    for (int n = j+1; n < 4; n++){
      System.out.println(c[i] + c[j] + c[n]);
      for (int m = n+1; n < 4; m++){
        System.out.println(c[i] + c[j] + c[n]+c[m]);
      } 
     }
  }  
}

解决方案 »

  1.   

    String[] c = {"a","b","c","d"};
    for (int i = 0; i < 4; i++){
      System.out.println(c[i]);  
      for (int j = i+1; j < 4; j++){
        System.out.println(c[i] + c[j]);
        for (int n = j+1; n < 4; n++){
          System.out.println(c[i] + c[j] + c[n]);
          for (int m = n+1; m < 4; m++){
            System.out.println(c[i] + c[j] + c[n] + c[m]);
          } 
         }
      } 
    }
      

  2.   

    如果是100个字母呢?是不是要写100个for语句?
      

  3.   

    用递归,不用写一百行for,排列组合问题好像就得折磨多,那位数学家发挥一下吧
      

  4.   

    上面的程序是输出所有的排列组合,现在要输出:“abcd”,“acbd”“adbc”......等所有的组合,而且不能重复。
      

  5.   

    #define len 4
    main()
    {
    char a[len+1];
    int i,num,j,k,temp,max=1;
    for(i=0;i<len;i++)
    max*=2;// max= 2*2.....*2
    strcpy(a,"abcd");
    for(i=1;i<max;i++)
    {
     num=i;
     printf("\n");
     for(j=len-1;j>=0;j--)
       {
    temp=1;
    for(k=0;k<j;k++)
       temp*=2;
    if(num/temp!=0)
    printf("%c",a[j]);
    num=num%temp;
    }
     }
    如果楼主只要求显示,这个足够了
    这个程序排列的长度是有限制 取决的max的二进制的位数
       如果max为unsigned的 即8个二进制位 只能排8个个字母
    由于很久没用C了 一些函数不清楚了 像求2的n次幂 可能用库函数的
      给分吧   楼主
      

  6.   

    效率应该可以的
    外循环次数为所有排列的个数 即2的n次幂减一
    内循环为字串的长度 即 len
    而且算法还可以优化一些的 比如当num=0时可以跳出当前内循环