擅长排列的小明
时间限制: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<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cstring> 5 6 using namespace std; 7 8 void fun(int n,int r,int cur); 9 int a[10]; 10 11 int main() 12 { 13 int t,n,r; 14 15 scanf("%d",&t); 16 while(t--) 17 { 18 memset(a,0,sizeof(a)); 19 scanf("%d%d",&n,&r); 20 21 fun(n,r,0); 22 } 23 return 0; 24 } 25 26 void fun(int n,int r,int cur) 27 { 28 int i,j; 29 30 if(r==cur) 31 { 32 for(i=0; i<r; i++) 33 printf("%d",a[i]); 34 printf("\n"); 35 } 36 else for(i=1;i<=n;i++) 37 { 38 int k=1; 39 for(j=0; j<cur; j++) 40 if(a[j]==i) 41 k=0; 42 if(k) 43 { 44 a[cur]=i; 45 fun(n,r,cur+1); 46 } 47 } 48 49 }