一:题目
请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。
输入格式:
输入给出正整数n(<10)。
输出格式:
输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,即序列a
输入样例:
3
输出样例:
123
132
213
231
312
321
二:思路
这道题的考查的是全排列,我将代码中的核心递归代码用图示进行展示(这里我省略了当i= 时候的流程,思路相似)
三:上代码
#include<bits/stdc++.h>
using namespace std;
int N;
vector<string>v;
void swap(int arr[],int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
string printarr(int arr[]){
//将int型 转换成string类型实现int型数字的拼接
stringstream st;
for(int i = 0; i < N; i++){
st << arr[i] ;
}
string str = st.str();
return str;
}
void perm(int A[],int p,int q){
if(p == q){
string str = printarr(A);
v.push_back(str);
}else{
for(int i = p; i <= q; i++){
swap(A,p,i);
perm(A,p+1,q);
swap(A,p,i);
}
}
}
int main(){
cin >> N;
int arr[10];
for(int i = 0; i < N; i++){
arr[i] = i + 1;
}
perm(arr,0,N-1);
sort(v.begin(),v.end());
for(int i = 0; i < v.size(); i++){
cout << v[i] << endl;
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/c5c34b0d854d4b52bd71bc2dd09bc90b.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA57Sv5LqG5Zuw5LqG5pWy5Luj56CBIOaPkOelnuaKl-eWsuWKsw==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)