题目描述
输入n,按字典序从小到大输出n的全排列。
输入
多组测试数据,读入到文件尾结束。每组测试数据输入一个n (1<=n<=5)。
输出
对于每组测试数据,输出n的全排列。每行最后一个数字后面不要输出空格。
样例输入
1
2
3
样例输出
1
1 2
2 1
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
实际上是凑数的一种变式,
暴力过。
#include <iostream>
#include <string.h>
using namespace std;
int n,m;
int ans;
int a[11];
int b[11];
int flag;
void fun(int x)
{
if(x==n+1)
{
flag=0;
memset(b,0,sizeof(b));
for(int i=1;i<=n;i++)
{
b[a[i]]++;
}
for(int j=1;j<=n;j++)
{
if(b[a[j]]!=1)
return;
}
for(int i=1;i<=n;i++)
{
while(flag++)
{
cout<<" ";
break;
}
cout<<a[i];
}
cout<<endl;
return;
}
for(int i=1;i<=n;i++)
{
a[x]=i;
fun(x+1);
}
}
int main()
{
while(cin>>n&&n)
{
fun(1);
}
return 0;
}