http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1089
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int vis[24],n,a[24];
void dfs(int pp,int qq)
{
int i,j;
if(qq==6)
{
for(i=1;i<=n;i++)
{
if(vis[i]==1)
{
printf("%d",a[i]);
break;
}
}
for(j=i+1;j<=n;j++)
if(vis[j]==1)
printf(" %d",a[j]);
printf("\n");
return ;
}
for(i=pp+1;i<=n;i++)
{
if(vis[i]==0)
{
//printf("%d ",i);
vis[i]=1;
dfs(i,qq+1);
}
vis[i]=0;
}
return ;
}
int main()
{
int i,sum;
sum=0;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
if(sum>0)
printf("\n");
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n-6+1;i++)
{
memset(vis,0,sizeof(vis));
vis[i]=1;
dfs(i,1);
}
sum++;
}
return 0;
}
题意:输入一个数n,之后输入n个数,从中任意选出6个数,将所有的情况都表示出来。
注意点:题目要求每一个样例后都都输入一个空行,但是最后一个例子不要输。
解决方法:可以用一个变量(sum)来记录你输入了几个样例,当这个变量大于0时,就在开始时输入换行。