ZOJ 1089 Lotto

原题链接

题目大意:有一种抽奖游戏乐透(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;
}
原文地址:https://www.cnblogs.com/naive/p/3568769.html