其他分享
首页 > 其他分享> > 双色球

双色球

作者:互联网

双色球

单点时限: 2.0 sec

内存限制: 512 MB

双色球投注区分为红色球号码区和蓝色球号码区,红色球号码区由1-33共三十三个号码组成,蓝色球号码区由1-16共十六个号码组成。投注时选择6个红色球号码和1个蓝色球号码组成一注进行单式投注。其中奖规则为:

一等奖(6+1)
二等奖(6+0)
三等奖(5+1)
四等奖(5+0、4+1)
五等奖(4+0、3+1)
六等奖(2+1、1+1、0+1)
其中(a+b)即为有a个红色球,b个蓝色球与开奖某个数字相同(只与数字有关,与位置无关)。
现在你有 n 张双色球彩票,以及本场彩票开奖结果,请你求出这 n 张彩票获得的最高奖。

输入格式
第一行输入一个 n ,表示 n 张彩票
接下来 n 行,每行 7 个数字,表示每张彩票的选号,其中前六个位红色球,后一个为蓝色球。
接下来一行,输入 7 个数字,表示开奖结果,其中前六个为红色球,后一个为蓝色球。

输出格式
输出所有彩票中能获得的最高等级奖,若无,则输出”0”。

样例
input
5
2 17 21 28 30 32 10
2 12 17 29 30 31 15
9 10 19 25 26 30 12
6 8 18 29 30 31 10
13 14 21 22 27 32 8
6 7 12 19 27 28 12
output
6
input
3
2 17 21 28 30 32 10
2 12 17 29 30 31 15
9 10 19 25 26 30 12
6 8 18 29 30 31 10
output
6
提示
彩票六个红色球数字均为从小到大排列

可以用栈(题目说了均为从小到大排列,所以直接用数组来比较也可以)
结束之后五分钟才写出来的(太遗憾了)

#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
int a[100000][10];
int b[8];
int main(){
	int n;
	
	cin>>n;
	for(int i=0;i<n;i++){
		for(int j=0;j<7;j++){
			cin>>a[i][j];
		}
	}
	int deng=7;
	
	for(int j=0;j<7;j++){
			cin>>b[j];
		}
		for(int i=0;i<n;i++){
			int aa=0,bb=0,deng1=7;
			int s=0;
			for(int j=0;j<6;j++){
				if(b[s]==a[i][j]&&s<6){
					aa++;
					s++;
				}
				else{
					while(b[s]<=a[i][j]&&s<6){
				if(b[s]==a[i][j]){
					aa++;
					s++;
				}
				else{
					s++;
				}
					}
				}
			}
		
			if(b[6]==a[i][6]) bb++;
			if(aa==6&&bb==1) deng1=1;
			if(aa==6&&bb==0) deng1=2;
			if(aa==5&&bb==1) deng1=3;
			if((aa==5&&bb==0)||(aa==4&&bb==1)) deng1=4;
			if((aa==4&&bb==0)||(aa==3&&bb==1)) deng1=5;
			if((aa==2&&bb==1)||(aa==1&&bb==1)||(aa==0&&bb==1)) deng1=6;
			if(deng1<deng){
				deng=deng1;
			}
			//cout<<deng1<<" "<<aa<<" "<<bb<<endl;
			
		}
		if(deng<7) cout<<deng<<endl;
		else cout<<"0"<<endl;
	return 0;
}

标签:10,双色球,12,号码,int,30,彩票
来源: https://blog.csdn.net/qq_43470233/article/details/96616407