D的小L
时间限制: 4000 ms | 内存限制:65535 KB
难度: 2
- 描述
- 一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡出了个题目想难倒匡匡(小L很D吧 ),有一个数n(0<n<10),写出1到n的全排列,这时匡匡有点囧了 ,,,聪明的你能帮匡匡解围吗?
- 输入
- 第一行输入一个数N(0<N<10),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个整数x(0<x<10) 输出
- 按特定顺序输出所有组合。 特定顺序:每一个组合中的值从小到大排列,组合之间按字典序排列。 样例输入
-
223
样例输出 -
1221123132213231312321
来源 - 上传者
- RE: 就是组合数那一类题。
-
1 #include
2 #include 3 #include 4 using namespace std; 5 int n, dis[10], vis[10]; 6 void Dfs(int a) 7 { 8 if(a == n) 9 {10 for(int i = 0; i < n; i++)11 printf("%d", dis[i]);12 printf("\n");13 return;14 }15 else16 {17 for(int i = 1; i <= n; i++)18 {19 if(vis[i])20 continue;21 vis[i] = 1;22 dis[a] = i; 23 Dfs(a + 1);24 vis[i] = 0;25 }26 }27 }28 int main()29 {30 int t;31 scanf("%d", &t);32 while(t--) 33 {34 scanf("%d", &n);35 memset(vis, 0, sizeof(vis));36 Dfs(0);37 }38 return 0;39 } 1 #include
2 #include 3 #include 4 #include 5 using namespace std; 6 int main() 7 { 8 int t; 9 scanf("%d", &t);10 while(t--)11 {12 int n, list[10];13 scanf("%d", &n);14 for(int i = 0; i < n; i++)15 list[i] = i + 1;16 int pre = -1;17 do{18 if(list[n-1] != pre)19 {20 for(int i = 0; i < n; i++)21 printf("%d", list[i]);22 printf("\n");23 pre = list[n-1];24 }25 }while(next_permutation(list, list + n));26 }27 return 0;28 }