1073 - 彩票
有一种彩票的玩法是从1~49这49个整数中挑选6个数字。小明为此研究出一个选号的策略,就是从这49个数字中选出一个子集S,S中包含了k(k>6)个数字,然后从S中再选择6个数字作为最终选定的号码。
你的任务是,给你k和集合S,输出从S中选择投注号码的所有组合。
题目输入
输入包含多组测试数据。每组输入首先是一个整数k(6<k<13)。然后是k个整数,表示集合S,这k个整数按升序给出。当k=0时,输入结束。
题目输出
对于每组输入,输出所有的投注组合,每行一种,每种按照号码升序排列,所有组合按照字典序升序排列。
每两组输出之间输出一个空行。
输入/输出样例
题目输入
7 1 2 3 4 5 6 7 8 1 2 3 5 8 13 21 34 0
题目输出
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
C语言解答
#include<stdio.h> int main() { int k,n[13],i,t=0,a,b,c,d,e,f; while(scanf("%d",&k)!=EOF,k) { if(t++) puts(""); for(i=0;i<k;i++) scanf("%d",&n[i]); for(a=0;a<k-5;a++) for(b=a+1;b<k-4;b++) for(c=b+1;c<k-3;c++) for(d=c+1;d<k-2;d++) for(e=d+1;e<k-1;e++) for(f=e+1;f<k;f++) printf("%d %d %d %d %d %d\n",n[a],n[b],n[c],n[d],n[e],n[f]); } return 0; }
C++解答
#include<stdio.h> int main() { int k,n[13],i,t=0,a,b,c,d,e,f; while(scanf("%d",&k)!=EOF,k) { if(t++) puts(""); for(i=0;i<k;i++) scanf("%d",&n[i]); for(a=0;a<k-5;a++) for(b=a+1;b<k-4;b++) for(c=b+1;c<k-3;c++) for(d=c+1;d<k-2;d++) for(e=d+1;e<k-1;e++) for(f=e+1;f<k;f++) printf("%d %d %d %d %d %d\n",n[a],n[b],n[c],n[d],n[e],n[f]); } return 0; }