用递归法进行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;
;
} 展开
#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;
;
} 展开
1个回答
展开全部
比如有(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);
}
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);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询