请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。
输入格式:
输入给出正整数n(<10)。
输出格式:
输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,即序列排在序列之前,如果存在k使得。
输入样例:
3
结尾无空行
输出样例:
123
132
213
231
312
321
结尾无空行
代码1:
# include <iostream>
# include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n ;
string a;
for( int i = 1 ; i <= n ; i ++ )
{
a += i+'0';
}
do{
cout << a << endl;
}while(next_permutation(a.begin(),a.end())); //使用全排列函数
return 0;
}
提交结果1:
代码2:
#include <iostream>
using namespace std;
const int maxn = 1010;
int num[maxn];
void print_per(int n,int *A,int cur)
{
if(cur==n)
{
for(int i=0;i<n;i++)
cout << A[i];
cout << endl ;
}
else
for(int i=1;i<=n;i++)
{
int ok = 1;
for(int j=0;j<cur;j++)
{
if(A[j]==i) ok=0;
}
if(ok)
{
A[cur]=i;
print_per(n,A,cur+1);
}
}
}
int main()
{
int n;
cin >> n;
for(int i=0;i<n;i++)
num[i] = i+1;
print_per(n,num,0);
}