基本算法4.2彩票

基本算法4.2彩票

题目描述

有一种彩票的玩法是从1~49这49个整数中挑选6个数字。小明为此研究出一个选号的策略,就是从
这49个数字中选出一个子集S,S中包含了k(k>6)个数字,然后从S中再选择6个数字作为最终选
定的号码。你的任务是,给你k和集合S,输出从S中选择投注号码的所有组合。

输入

输入首先是一个整数k(6<k<13)。然后是k个整数,表示集合S,这k个整数按升序给出。

输出

输出所有的投注组合,每行一种,每种按照号码升序排列,所有组合按照字典序升序排列。

样例输入

【样例输入1】
7 1 2 3 4 5 6 7
【样例输入2】
8 1 2 3 5 8 13 21 34

样例输出

【样例输出1】
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
【样例输出2】
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

题解:

搜索是正解(六个for循环是歪解,简单到炸)。

源代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
    int k,n[20],a,b,c,d,e,f;
    while(scanf("%d",&k)!=EOF) {
        for(int i=0; i<k; i++) scanf("%d",&n[i]);
        for(a=0; a<=k-6; a++) {
            for(b=a+1; b<=k-5; b++) {
                for(c=b+1; c<=k-4; c++) {
                    for(d=c+1; d<=k-3; d++) {
                        for(e=d+1; e<=k-2; e++) {
                            for(f=e+1; f<=k-1; f++) {
                                printf("%d %d %d %d %d %d\n",n[a],n[b],n[c],n[d],n[e],n[f]);
                            }
                        }
                    }
                }
            }
        }
        printf("\n");
    }
    return 0;
}

AC

发布了50 篇原创文章 · 获赞 51 · 访问量 1361

猜你喜欢

转载自blog.csdn.net/m0_45682806/article/details/104051233
4.2