用递归法进行n个数的全排列,思路是怎样的?

如输入3,即对1,2,3,4进行全排列,把程序补充完整。#include"stdio.h"inta[10],n,count=0;voidperm(intk){intp,t... 如输入3,即对1,2,3,4进行全排列,把程序补充完整。
#include"stdio.h"
int a[10],n,count=0;
void perm(int k)
{
int p,t,j;
if( )
{count++;
for(p=1;p<=k;p++) printf("%1d",a[p]);/*"%1d"中的数字是1,而不是字母l*/
printf(" ");
if( ) printf("\n");
return;}
for(j=k;j<=n;j++)
{t=a[k];a[k]=a[j];a[j]=t;
;
t=a[k];
;}
}

main()
{int i;
printf("\nInput n:");
scanf("%d",&n);
for(i=1;i<=n;i++) a[i]=i;
;
}
展开
 我来答
百度网友5d2d01fa0
推荐于2016-04-14 · TA获得超过2158个赞
知道小有建树答主
回答量:943
采纳率:0%
帮助的人:1417万
展开全部
比如有(1,2,3,4)这样一组数

1.先分成(1)和(2,3,4),然后对(2,3,4)全排列
2.把(1)分别和(2,3,4)中的数对调
3.比如一次调换(2),(1,3,4),然后对(2,3,4)全排列
4.调换的算完了,恢复,变成(1),(2,3,4),再调换下一个(3),(1,2,4)

大概就是这样的
--------------------------------
原来是填程序啊........
#include"stdio.h"
int a[10],n,count=0;
void perm(int k)
{
int p,t,j;
if( k==n )
{count++;
for(p=1;p<=k;p++) printf("%1d",a[p]);/*"%1d"中的数字是1,而不是字母l*/
printf(" ");
if( count%3==0 ) printf("\n");
return;}
for(j=k;j<=n;j++)
{t=a[k];a[k]=a[j];a[j]=t;
perm(k+1);
t=a[k];
a[k]=a[j];a[j]=t;}
}

main()
{int i;
printf("\nInput n:");
scanf("%d",&n);
for(i=1;i<=n;i++) a[i]=i;
perm(1);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式