题解 P2550 【[AHOI2001]彩票摇奖】

题目链接

大家有没有发现数据范围好小呀

我们只需要开7~8的数组就好!!

中间比较的时候懒得用for循环比较了。直接爆搜。

废话不多说,直接上代码。

#include<bits/stdc++.h>
using namespace std;
int a[7];//作为中奖号码
int b[7];//作为每一回彩票号码
int c[7];//作为中奖的等级
int main()
{
    int n;
    cin>>n;//彩票张数
    for(int i=0;i<7;i++)
    {
        cin>>a[i];//输入中奖号码。
    }
    for(int i=0;i<n;i++)//n张,循环n次
    {
        int sum=0;//每一张相同的个数,每次循环初始化为0;
        for(int j=0;j<7;j++)//输入彩票号
        {
        cin>>b[j];
        }
        for(int j=0;j<7;j++)//精髓。因为数据较小,所以每一回懒得用for循环对比,直接暴力比较
        {
        if(b[j]==a[0]||b[j]==a[1]) sum++;
        else if(b[j]==a[2]||b[j]==a[3]) sum++;
        else if(b[j]==a[4]||b[j]==a[5]) sum++;
        else if(b[j]==a[6]||b[j]==a[7]) sum++;
        }
        c[sum-1]+=1;//注意点这里大家应该会有问题,一会就明白了。不过###一定要减一###不多说,自己想。
    }
    for(int i=6;i>=0;i--)//我们反序存的奖级。就反序输出就好啦。
    {
        cout<<c[i]<<" ";//输出
    }
    return 0;//程序拜拜。
}

 


搜索还可以这么写

for(int j=0;j<7;j++)
{
    for(int k=0;k<7;k++)
    {
        if(b[j]==a[k]) sum++;
    }
}
       c[sum-1]+=1;

 


好哒,没了

上一篇:题解 P1720 【月落乌啼算钱】


下一篇:题解 P1339 【[USACO09OCT]热浪Heat Wave】