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]);
}
}
}
}
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]);
}
}
}
}
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]);
}
}
}
}
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次幂 可能用库函数的
给分吧 楼主
外循环次数为所有排列的个数 即2的n次幂减一
内循环为字串的长度 即 len
而且算法还可以优化一些的 比如当num=0时可以跳出当前内循环