擅长排列的小明

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
 
描述
小明十分聪明,而且十分擅长排列计算。比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想为难他,在这5个数字中选出几个数字让他继续全排列,那么你就错了,他同样的很擅长。现在需要你写一个程序来验证擅长排列的小明到底对不对。
 
输入
第一行输入整数N(1<N<10)表示多少组测试数据,
每组测试数据第一行两个整数 n m (1<n<9,0<m<=n)
输出
在1-n中选取m个字符进行全排列,按字典序全部输出,每种排列占一行,每组数据间不需分界。如样例
样例输入
2
3 1
4 2
样例输出
1
2
3
12
13
14
21
23
24
31
32
34
41
42
43
 1 #include<cstdio>
 2 #include<cstring>
 3 
 4 int visit[10];
 5 int a[10];
 6 int m,n;
 7 
 8 void permutation(int i)
 9 {
10     int j,k;
11     if(i>m)
12     {
13         for(k=1;k<=m;++k)
14             printf("%d",a[k]);
15         printf("\n");
16     }
17     else
18     {
19         for(j=1;j<=n;++j)
20         {
21             if(visit[j]==0)
22             {
23                 visit[j]=1;
24                 a[i]=j;
25                 permutation(i+1);
26                 visit[j]=0;
27             }
28         }
29     }
30 }
31 
32 int main()
33 {
34     int T;
35     scanf("%d",&T);
36     while(T--)
37     {
38         scanf("%d%d",&n,&m);
39         memset(visit,0,sizeof(int));
40         permutation(1);
41     }
42     return 0;
43 }

 

posted on 2012-08-13 22:00  可笑痴狂  阅读(292)  评论(1编辑  收藏  举报