蓝桥杯 ADV-133 算法提高 彩票

版权声明:【https://github.com/liuchuo】大四在校生,水平有限,还望学长们多多包涵,Github真诚求Star~不甚感激!!!(卖萌脸ヾ(=^▽^=)ノ https://blog.csdn.net/liuchuo/article/details/84257868

问题描述
为丰富男生节活动,贵系女生设置彩票抽奖环节,规则如下:
1、每张彩票上印有7个各不相同的号码,且这些号码的取值范围为[1, 33];
2、每次在兑奖前都会公布一个由七个互不相同的号码构成的中奖号码;
3、共设置7个奖项,特等奖和一等奖至六等奖。兑奖规则如下:
特等奖:要求彩票上的7个号码都出现在中奖号码中;
一等奖:要求彩票上的6个号码出现在中奖号码中;
二等奖:要求彩票上的5个号码出现在中奖号码中;
……
六等奖:要求彩票上的1个号码出现在中奖号码中;
注:不考虑号码出现的顺序,例如若中奖号码为23 31 1 14 19 17 18,则彩票12 8 9 23 1 16 7由于其中有两个号码(23和1)出现在中奖号码中,所以该彩票中了五等奖。
现已知中奖号码和李华买的若干彩票的号码,请你写一个程序判断他的彩票中奖情况。

输入格式
第一行一个正整数n,表示彩票数量,第二行7个整数,表示中奖号码,下面n行每行7个整数,描述n张彩票。
输出格式
7个空格隔开的数字,第1个数字表示特等奖的中奖张数,第2个数字表示一等奖的中奖张数,第3个数字表示二等奖的中奖张数……第7个数字表示六等奖的中奖张数。
样例输入
3
1 2 3 4 5 6 7
11 12 13 14 15 16 17
12 13 14 15 16 17 18
8 7 10 9 31 30 29

样例输出
0 0 0 0 0 0 1
数据规模和约定
30%的数据n<=100;
70%的数据n<=1000;
100%的数据n<=100000。

*****提示:数组定义为全局变量,可以分配更多内存。*****

分析:1.m数组标记中奖号码,mt数组标记彩票号码
2.如果一个号码在中奖号码中出现多次,且彩票中也出现多次,要取他们的最小值,不能当成只中了一个号码哦~

#include <iostream>
using namespace std;
int main() {
    int n, m[34] = {0}, a[10] = {0};
    cin >> n;
    for (int i = 0; i < 7; i++) {
        int t;
        cin >> t;
        m[t]++;
    }
    while (n--) {
        int mt[34] = {0}, sum = 0;
        for (int i = 0; i < 7; i++) {
            int t;
            cin >> t;
            mt[t]++;
        }
        for (int i = 1; i <= 33; i++) 
            sum += min(mt[i], m[i]);
        a[7 - sum]++;
    }
    for (int i = 0; i < 7; i++) {
        cout << a[i] << " ";
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/liuchuo/article/details/84257868
今日推荐