题解
题目描述
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入格式
n(1≤n≤9)
输出格式
由1~n组成的所有不重复的数字序列,每行一个序列。每个数字保留5个场宽。
输入输出样例
输入 #1 复制
3
输出 #1 复制
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
题意:在1~n之间所有的排列且不能有重复的数字。这一看就知道要用递归。但我就直接用主函数来递归。
不说了,直接上代码!
#include<bits/stdc++.h>
using namespace std;
int step = 1;
int a[20];
bool b[20];
int n;
int main (){
if(step == 1){
cin >> n;
}
if(step - 1 == n){
for(int i = 1;i <= n;i++){
printf("%5d",a[i]);
}
cout <<endl;
}
for(int i = 1;i <= n;i++){
if(b[i] == 0){
b[i] = 1;
a[step] = i;
step++;
main ();
step--;
b[i] = 0;
}
}
return 0;
}
有不好之处请大神多多指导!