韦德公牛壁纸:哪位大侠可以用C写一个n个数的全排列

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/04 16:47:13
比如1 2 3
答案是123 132 213 231 321 312
小弟这里有急用
不胜感激
我开始写的程序跟二楼的差不多但是现在我要把它推广到n个数,我就不会了

#include <stdio.h>
inline void Swap(char& a, char& b)
{// 交换a和b
char temp = a;
a = b;
b = temp;
}

void Perm(char list[], int k, int m)
{ //生成list [k:m ]的所有排列方式
int i;
if (k == m) {//输出一个排列方式
for (i = 0; i <= m; i++)
putchar(list[i]);
putchar('\n');
}
else // list[k:m ]有多个排列方式
// 递归地产生这些排列方式
for (i=k; i <= m; i++) {
Swap (list[k], list[i]);
Perm (list, k+1, m);
Swap (list [k], list [i]);
}
}

int main()
{
char s[]="123";
Perm(s, 0, 2);
return 0;
}

main()
{int i,j,k,n=3;
clrscr();
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
for(k=1;k<=3;k++)
if(i!=j&&i!=k&&j!=k) printf("%d%d%d ",i,j,k);
getch();}

#define n 3
main()
{int a[n];
for(a[0]=1;a[0]<=n;a[0]++)
for(a[1]=1;a[0]<=n;a[0]++){
{if(a[0]=a[1];continue;)}
for(a[2]=1;a[0]<=n;a[0]++){
{if(a[2]=a[1]&&a[2]=a[0]);continue}
printf("%d %d %d\n",a[0],a[1],a[2]);
}
}
}

printf("%d %d %d\n",a[0],a[1],a[2]);这样打印不是太好啊,N值可能很大;在内循环中打印单个数就能解决问题了

真的有急用?
给我发电子邮件,我给你写,免费的,我是计算机老师,我特喜欢c语言,不过在这上面写不太好,

我的电子邮件地址是,flyzxf@126.com
写明 标题 免的没我误删拉。

哇,这就深了让我想一下~