admin 管理员组

文章数量: 887021

彩票。。。

题目描述

 

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

你的任务是,给你k和集合S,输出从S中选择投注号码的所有组合。

 

输入

 

输入:

第一行是首先是一个整数k(6<k<13)。

第二行是k个整数,表示集合S,这k个整数按升序给出,各个数字之间以一个空格间隔。

 

输出

 

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

 

样例输入 

 

1 2 3 5 8 13 21 34

 

样例输出 

 

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

代码

#include <bits/stdc++.h>

using namespace std;

int n,a[30],b[69];

bool used[30];

void dfs(int k)

{

    if(k>6)  

    {

        for(int i=1;i<=6;i++)    cout<<b[a[i]]<<" ";    

        cout<<endl;

        return;

    }

    for(int i=1;i<=n;i++)

    {

        if(used[i]==false&&i>a[k-1])

        { 

            a[k]=i; 

            used[i]=true;

            dfs(k+1);

            used[i]=false;

        }       

    }

    }

int main()

{

    cin>>n;

    for(int i=1;i<=n;i++)    

    {

    cin>>b[i];

    }

    dfs(1);

    return 0;

}

 

 

 

本文标签: 彩票