hdoj1342 Lotto
2015-08-12 11:19
141 查看
Lotto
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1809 Accepted Submission(s): 881
Problem Description
In a Lotto I have ever played, one has to select 6 numbers from the set {1,2,...,49}. A popular strategy to play Lotto - although it doesn't increase your chance of winning - is to select a subset S containing k (k>6) of these 49
numbers, and then play several games with choosing numbers only from S. For example, for k=8 and S = {1,2,3,5,8,13,21,34} there are 28 possible games: [1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2,3,5,13,21], ... [3,5,8,13,21,34].
Your job is to write a program that reads in the number k and the set S and then prints all possible games choosing numbers only from S.
Input
The input file will contain one or more test cases. Each test case consists of one line containing several integers separated from each other by spaces. The first integer on the line will be the number k (6 < k < 13). Then k integers,
specifying the set S, will follow in ascending order. Input will be terminated by a value of zero (0) for k.
Output
For each test case, print all possible games, each game on one line. The numbers of each game have to be sorted in ascending order and separated from each other by exactly one space. The games themselves have to be sorted lexicographically,
that means sorted by the lowest number first, then by the second lowest and so on, as demonstrated in the sample output below. The test cases have to be separated from each other by exactly one blank line. Do not put a blank line after the last test case.
Sample Input
7 1 2 3 4 5 6 7 8 1 2 3 5 8 13 21 34 0
Sample Output
1 2 3 4 5 6 1 2 3 4 5 7 1 2 3 4 6 7 1 2 3 5 6 7 1 2 4 5 6 7 1 3 4 5 6 7 2 3 4 5 6 7 1 2 3 5 8 13 1 2 3 5 8 21 1 2 3 5 8 34 1 2 3 5 13 21 1 2 3 5 13 34 1 2 3 5 21 34 1 2 3 8 13 21 1 2 3 8 13 34 1 2 3 8 21 34 1 2 3 13 21 34 1 2 5 8 13 21 1 2 5 8 13 34 1 2 5 8 21 34 1 2 5 13 21 34 1 2 8 13 21 34 1 3 5 8 13 21 1 3 5 8 13 34 1 3 5 8 21 34 1 3 5 13 21 34 1 3 8 13 21 34 1 5 8 13 21 34 2 3 5 8 13 21 2 3 5 8 13 34 2 3 5 8 21 34 2 3 5 13 21 34 2 3 8 13 21 34 2 5 8 13 21 34 3 5 8 13 21 34本以为是排列组合,谁知是搜索 dfs写的#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int k,temp[110],sub[110],v[110],t=0; void dfs(int x,int low) { int i; if(x>=6)//到达长度即输出 { for(i=0;i<5;i++) { printf("%d ",sub[i]); } printf("%d\n",sub[5]); } else { for(int i=low;i<k;i++)//搜索核心 { if(v[i]==0) { sub[x]=temp[i]; v[i]=1; dfs(x+1,i); v[i]=0; } } } } int main() { while(scanf("%d",&k)&&k>0) { int i; if(t++) printf("\n"); memset(v,0,sizeof(v)); for(i=0;i<k;i++) scanf("%d",&temp[i]); sort(temp,temp+k); dfs(0,0); } }还有大神写的:[code]#include<stdio.h>
int sub[20],k=0,t=0,temp[20];
void dfs(int temp_el,int sub_el)
{
int i;
if(sub_el>=6)
{
for(i=0;i<5;i++)
printf("%d ",sub[i]);
printf("%d\n",sub[5]);
}
else
{
if(temp_el>=k) return ;
sub[sub_el]=temp[temp_el];
dfs(temp_el+1,sub_el+1);//加入元素
dfs(temp_el+1,sub_el);//不加入元素
}
return ;
}
int main()
{
while(scanf("%d",&k)&&k>0)
{
if(t++) printf("\n");
for(int i=0;i<k;i++)
{
scanf("%d",&temp[i]);
}
dfs(0,0);
}
return 0;
}
[/code]
相关文章推荐
- 键盘事件keydown、keypress、keyup分析解答
- C++11中的右值引用
- cocos图显示不出来,怀疑是太长了.然后百度了下各个硬件平台的限制
- HTML标签嵌套规则
- 社説
- hdu5375
- redhat安装ibm,rdac多路径的奇葩经历
- iOS 应用内付费(IAP)开发步骤一:填写相关的税务,银行,联系人信息;
- JAVA上百实例源码以及开源项目
- 大盘攻击4500需分三步走 逢回调即加仓
- DWZ富客户端框架 api
- Objective-C Modernization Tool
- URLClassLoader类加载器
- 记录----2015/8/12
- 使用 spice-guest-tools 让虚拟机支持spicec 双屏显示
- [资料]pthreads PHP
- HDU5375——DP——Gray code
- 激活神器 KMSAuto Net 2015 v1.3.8
- iOS中的分类(category)
- 集成CCFlow与GPM的办公系统驰骋CCOA介绍(一)