彩票。。。
题目描述
有一种彩票的玩法是从1~49这49个整数中挑选6个数字。小明为此研究出一个选号的策略,就是从这49个数字中选出一个子集S,S中包含了k(k>6)个数字,然后从S中再选择6个数字作为最终选定的号码。
你的任务是,给你k和集合S,输出从S中选择投注号码的所有组合。
输入
输入:
第一行是首先是一个整数k(6<k<13)。
第二行是k个整数,表示集合S,这k个整数按升序给出,各个数字之间以一个空格间隔。
输出
输出所有的投注组合,每行一种,每种按照号码升序排列,所有组合按照字典序升序排列。
样例输入
8
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;
}
彩票。。。
题目描述
有一种彩票的玩法是从1~49这49个整数中挑选6个数字。小明为此研究出一个选号的策略,就是从这49个数字中选出一个子集S,S中包含了k(k>6)个数字,然后从S中再选择6个数字作为最终选定的号码。
你的任务是,给你k和集合S,输出从S中选择投注号码的所有组合。
输入
输入:
第一行是首先是一个整数k(6<k<13)。
第二行是k个整数,表示集合S,这k个整数按升序给出,各个数字之间以一个空格间隔。
输出
输出所有的投注组合,每行一种,每种按照号码升序排列,所有组合按照字典序升序排列。
样例输入
8
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;
}