(选排列)下面程序的功能是利用递归方法生成从 1 到

(选排列)下面程序的功能是利用递归方法生成从 1 到 n(n<10)的 n 个数中取 k(1<=k<=n)个数的 全部可能的排列(不一定按升序输出)。

例如,当 n=3,k=2 时, 应该输出(每行输出 5 个排列): 

12 13 21 23 32 

31

程序:

#include <stdio.h>
int n,k,a[10]; 
long count=0;
void perm2(int j)
{
	int i,p,t;
	if( ① )
	{
		for(i=k;i<=n;i++)
	{
		count++;
		t=a[k]; a[k]=a[i]; a[i]=t;
		for( ② )
			printf("%1d",a[p]); /* "%1d" 中是数字 1,不是字母 l */
		printf(" ");
		t=a[k];a[k]=a[i];a[i]=t;
		if(count%5==0) printf("\n");
	}
	return;
	}
	for(i=j;i<=n;i++)
	{
		t=a[j];a[j]=a[i];a[i]=t;
		③ ;
		t=a[j]; ④ ;
	}
}
int main()
{
	int i;
	printf("\nEntryn,k (k<=n):\n");
	scanf("%d%d",&n,&k);
	for(i=1;i<=n;i++) a[i]=i;
	⑤ ;
}


答案
第1空:j=k / k=j
第2空:p:=1 to k
第3空:perm2(j+1)
第4空:a[j]:=a;a:=t
第5空:perm2(1)

题目信息

题号:6493
题型:填空题
难度:普通