刚拿到这道题的时候根本不知道往哪方面去想,后来也是看了别人的博客,才知道用可以用深搜来做,还是题目做得少,没感觉,还得多练。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,lotto[60],num[60];
void dfs(int coun,int p) //p记录当前在num数组的位置,coun记录lotto数组的位置
{
if(p>n||n+coun-p<=0) //剪枝
return;
if(coun==6)
{
printf("%d",lotto[0]);
for(int i=1; i<6; i++)
printf(" %d",lotto[i]);
printf("\n");
return;
}
lotto[coun]=num[p]; //转移元素
dfs(coun+1,p+1); //将num[p]放入lotto
dfs(coun,p+1); //没放入lott
}
int main()
{
int k=0;
while(scanf("%d",&n)!=EOF&&n)
{
for(int i=0; i<n; i++)
{
scanf("%d",&num[i]);
}
if(k>0)
printf("\n"); //这题的输出格式卡得比较严
k++;
dfs(0,0);
}
return 0;
}