D的小L---全排列

简介:

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)
输出
按特定顺序输出所有组合。
特定顺序:每一个组合中的值从小到大排列,组合之间按字典序排列。
样例输入
2
2
3
样例输出
12
21
123
132
213
231
312
321
查看代码---运行号:253085----结果:Accepted

运行时间:2012-10-07 20:48:25  |  运行人:huangyibiao
view sourceprint?
01.#include <iostream>
02. 
03.usingnamespacestd;
04. 
05.voidPrintElems(int*elem, int size)
06.{
07.for(inti = 1; i <= size; i++)
08.cout << elem[i];
09.cout << endl;
10.}
11. 
12.voidSwap(int&first, int &second)
13.{
14.inttmp = first;
15.first = second;
16.second = tmp;
17.}
18. 
19.voidReverse(int*elem, int leftIndex,int size)
20.{
21.for(inti = leftIndex, j = size; j >= i; i++, j--)
22.{
23.Swap(elem[i], elem[j]);
24.}
25. 
26.}
27. 
28.boolNotFinished(int*elem, int size)
29.{
30. 
31.//从右往左寻找第一个相邻元素中左边元素小于右边的元素的位置
32.intleftIndex = -1;
33.for(inti = size; i >= 2; i--)//0号不用
34.{
35.if(elem[i-1] < elem[i])
36.{
37.leftIndex = i-1;
38.break;
39.}
40.}//*******************************************************
41.if(leftIndex == -1)//找不到了,说明已经全部排完
42.{
43.returnfalse;
44.}
45. 
46.//从右往左寻找右边的元素中大于前面已经找到的元素的最小元素的位置
47.intrightIndex = -1;
48.for(inti = size; i >= leftIndex; i--)
49.{
50.if(elem[i] > elem[leftIndex])
51.{
52.rightIndex = i;
53.break;
54.}
55.}
56.//交换这两个元素
57.Swap(elem[leftIndex], elem[rightIndex]);
58. 
59.Reverse(elem, leftIndex+1, size);
60. 
61.returntrue;
62.}
63. 
64.intmain()
65.{
66.intsample;
67.cin >> sample;
68. 
69.while(sample--)
70.{
71.intx;
72.cin >> x;
73.int*elem =new int[x+1];
74. 
75.for(inti = 0; i <= x; i++)
76.elem[i] = i;
77.while(true)
78.{
79.PrintElems(elem, x);
80.if(!NotFinished(elem, x))
81.break;
82.}
83.                  delete []elem;
84.}
85.return0;
86.}


目录
相关文章
|
1月前
|
算法
算法每日一题---两数之和
算法每日一题---两数之和
16 0
|
3月前
|
算法 Java
LeetCode算法题---两数之和(一)
LeetCode算法题---两数之和(一)
32 0
|
3月前
|
存储 算法 Java
LeetCode算法题---两数相加(二)
LeetCode算法题---两数相加(二)
24 0
|
4月前
|
测试技术
每日一题 --- 力扣318----最大单词长度乘积
每日一题 --- 力扣318----最大单词长度乘积
|
4月前
LeetCode---两数之和
LeetCode---两数之和
18 0
|
10月前
剑指offer_数组---替换空格
剑指offer_数组---替换空格
28 0
|
10月前
剑指offer_字符串---左旋转字符串
剑指offer_字符串---左旋转字符串
33 0
|
存储 人工智能 算法
每日一题---4. 寻找两个正序数组的中位数[力扣][Go]
每日一题---4. 寻找两个正序数组的中位数[力扣][Go]
每日一题---4. 寻找两个正序数组的中位数[力扣][Go]
每日一题---7. 整数反转[力扣][Go]
每日一题---7. 整数反转[力扣][Go]
每日一题---7. 整数反转[力扣][Go]