题目描述
小 A 的学校,老师好不容易解决了市赛的报名问题,现在老师又犯愁了。现在有 �N 位同学参加比赛,但是老师想给他们排座位,但是排列方式太多了。老师非常想弄明白最后的排座次的结果是什么样子的,到底有多少种结果。
请设计一个程序帮助老师。最后输出各种情况的人名即可,一行一种情况,每种情况的名字按照报名即输入顺序排序。
输入
第一行 输入 N;
第二行 到 第N+1 行 共输入 N 个人名。
由于小 A 学校承办能力实在有限,所以其中 N 小于等于 10 人。
输出
输出各种情况的人名即可,一行一种情况,每种情况的名字按照报名即输入顺序排序。
样例输入 复制
3
xiaowang
xiaoA
xiaoli
样例输出 复制
xiaowang xiaoA xiaoli
xiaowang xiaoli xiaoA
xiaoA xiaowang xiaoli
xiaoA xiaoli xiaowang
xiaoli xiaowang xiaoA
xiaoli xiaoA xiaowang
代码:
#include<stdio.h>
#include<iostream>
using namespace std;
#include<vector>
int n;
vector<string>ans;
string name[11];
int flag[100];
void cacl(int x)
{
if(x==n+1)
{
for(int i=0;i<n;i++)
{
cout<<ans[i];
printf(" ");
}
cout<<endl;
}
for(int i=1;i<=n;i++)
{
if(flag[i]!=1)
{
ans.push_back(name[i]);
flag[i]=1;
cacl(x+1);
ans.pop_back();
flag[i]=0;
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>name[i];
}
cacl(1);
}