UVA441题解
题目意思
有
题目思路
根据题目思路进行 dfs 即可。
首先,定义两个变量,一个用来记录枚举到的数的位置,另一个用来记录枚举到的数的编号。假设数的位置为
第二步,记录一个答案数组为
第三步,确认递归条件。因为我们的
题目细节
UVA 测评系统特别恶心。
- 在答案的每一行的行末,都不能有空格出现。
- 每一组数据后都要加一个空格。
针对以上这些情况,我们要进行特判,防止格式错误。我就因为这个错了三四次。
正确代码
#include<bits/stdc++.h>
using namespace std;
int n,t;
int a[15],b[15];
void dfs(int wz,int sy)
{
if(sy==7)//符合情况,输出答案
{
for(int i=1; i<=6; i++)
{
cout<<b[i];
if(i<6)cout<<" ";//特判格式情况
}
cout<<endl;
}
if(wz+(6-sy)>n)return ;//判断推出递归条件
for(int i=wz; i<=n; i++)//递归
{
b[sy]=a[i];
dfs(i+1,sy+1);
}
}
int main()
{
while(true)
{
cin>>n;
if(n==0)return 0;
//特判格式情况
if(t==1)cout<<endl;
t=1;
for(int i=1; i<=n; i++)cin>>a[i];
dfs(1,1);
}
return 0;
}