例如输入123 输出123 132 213 231 312 321
//以下为代码文件,思路就是交换数字,递归
#include <stdio.h>
int n = 1;
int ans[1000];
void swap(int *a, int *b)
{
int m;
m = *a;
*a = *b;
*b = m;
}
void perm(int list[], int k, int m)
{
int i,tmp=0;
if(k > m)
{
for(i = 0; i <= m; i++)
{
tmp=tmp*10+list[i];
}
ans[n]=tmp;
n++;
}
else
{
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
perm(list, k + 1, m);
}
}
}
int main()
{
int list[] = {1, 2, 3};
int i;
perm(list, 0, 2);
for(i=1;i<n;i++)printf("%d\n",ans[i]);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2014-08-10
要带顺序的吗?如果带顺序,程序就比较麻烦追问 追问
输出全部就行 不限制顺序
追答谢谢了 注释很详细
追答不客气,多研究一下就会更清楚