题目描述
要求计算从1到N的N个整数所能构成的所有排列,并按照字典顺序依次输出。
输入
输入为一组整数,每行为一个整数N,N<8,结尾行为0。
输出
对每一个输入N,按照字典序输出1到N的所有排列,数字中间用空格隔开,
每个排列的输出占一行。
样例输入
2
3
0
样例输出
1 2
2 1
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
要求计算从1到N的N个整数所能构成的所有排列,并按照字典顺序依次输出。
输入
输入为一组整数,每行为一个整数N,N<8,结尾行为0。
输出
对每一个输入N,按照字典序输出1到N的所有排列,数字中间用空格隔开,
每个排列的输出占一行。
样例输入
2
3
0
样例输出
1 2
2 1
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
代码如下:
#include<iostream>
using namespace std;
void QPL(int *a,int k,int n)
{
if(k==n)
{
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
for(int i=0;i<n;i++)
{
int isok=1;
for(int j=0;j<k;j++)
{
if(a[j]==i+1)
{
isok=0;
break;
}
}
if(isok==1)
{
a[k]=i+1;
QPL(a,k+1,n);
}
}
}
void init(int *a,int n)
{
for(int i=1;i<=n;i++)
a[i-1]=i;
}
int main()
{
int N;
while(cin>>N)
{
int a[N];
init(a,N);
QPL(a,0,N);
}
return 0;
}