( 全排列 ) 下面程序的功能是利用递归方法生成从 1
( 全排列 ) 下面程序的功能是利用递归方法生成从 1 到 n(n<10) 的 n 个数的全部可能的排列 ( 不一定 按升序输出 ) 。例如,输入 3,则应该输出 ( 每行输出 5 个排列 ) :
123 132 213 231 321 312
程序:
#include<stdio.h>
int n,a[10]; /*a[1],a[2], …,a[n] 构成 n 个数的一个排列 */
long count=0; /* 变量 count 记录不同排列的个数,这里用于控制换行 */
void perm(int k)
{
int j,p,t;
if(______ ①______)
{
count++;
for(p=1;p<=n;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]; ______④______;
}
}
int main()
{
int i;
printf("Entry n:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
a[i]=i;
______⑤______;
}答案
第1空:k==n
第2空:count%5==0
第3空:perm(k+1)
第4空:a[k]=a[j];a[j]=t
第5空:perm(1)