题目大意:有一种抽奖游戏乐透(Lotto),规则是从1到49这49个自然数中随机抽取6个数。现在有一种简化版的游戏,先在49个数里面选出k(6<k<13)个数,然后再从这k个数里面选出6个数。问一共有多少种数字排列的可能,把所有的可能按照升序输出。< p="">
解法:输入的数字已经按照升序排列好了。数字范围不大,最多也就是13选6,所以可以暴力破解法。六层for循环解决问题。如果数据量再大的话,就要用深度优先搜索了。
参考代码:
#include<iostream> using namespace std; int main(){ int k,i,s[13]={0}; int a,b,c,d,e,f; bool first=true; while(cin>>k&&k!=0){ if(!first){ cout<<endl; }else{ first=false; } for(i=0;i<k;i++) cin>>s[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++){ cout<<s[a]<<' '<<s[b]<<' '<<s[c]<<' '<<s[d]<<' '<<s[e]<<' '<<s[f]<<endl; } } } } } } } return 0; }