POJ2245 Lotto
2015-10-22 19:35
253 查看
Lotto
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.
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 6634 | Accepted: 4201 |
Description
In the German Lotto you have 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 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
Source
Ulm Local 1996 题意:给定一个k个数的升序序列,从中取出6个,按照字典序输出所有组合方式 思路就是dfs了,算是比较简单的dfs,很快就敲出来了。/* ID: LinKArftc PROG: poj2245.cpp LANG: C++ */ #include <map> #include <set> #include <cmath> #include <stack> #include <queue> #include <vector> #include <cstdio> #include <string> #include <utility> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define eps 1e-8 #define randin srand((unsigned int)time(NULL)) #define input freopen("input.txt","r",stdin) #define debug(s) cout << "s = " << s << endl; #define outstars cout << "*************" << endl; const double PI = acos(-1.0); const int inf = 0x3f3f3f3f; const int INF = 0x7fffffff; typedef long long ll; const int maxn = 15; int num[maxn]; int n; int ans[10]; void dfs(int cnt, int cur) { if (cnt == 6) { for (int i = 1; i <= 6; i ++) printf("%d%c", ans[i], i == 6 ? '\n' : ' '); return ; } if (cur > n) return; for (int i = cur; i <= n; i ++) { cnt ++; ans[cnt] = num[i]; dfs(cnt, i + 1); cnt --; } } int main() { int _t = 1; while (~scanf("%d", &n) && n) { if (_t > 1) printf("\n"); _t ++; for (int i = 1; i <= n; i ++) scanf("%d", &num[i]); dfs(0, 1); } return 0; }
相关文章推荐
- ajaxForm,ajaxSubmit
- MONGO JS 脚本
- dhcp snooping原理
- Facebook内部高效工作PPT指南
- 1038. 统计同成绩学生(20)
- 使用系统拍照返回的照片默认旋转90问题
- iOS开发拓展篇—UIDynamic(捕捉行为)
- 第五次作业
- [Leetcode]Unique Paths II
- string 的实例分析。
- hdu 4788 Hard Disk Drive(水)
- iOS开发拓展篇—UIDynamic(重力行为+碰撞检测)
- 关于Quartz 2D绘图的简单使用
- openOffice在linux和window转的有些不同
- hadoop学习第一天
- Recruit Coupon Purchase Winner's Interview: 2nd place, Halla Yang
- spring mvc配置ObjectMapper忽略无法识别的字段,以及一些博客推荐
- 对几种流行的Javascript模板引擎的测试对比
- 关键字
- iOS开发拓展篇—UIDynamic(简单介绍)