时间限制:1000MS 内存限制:256000KB
题目描述
小明怀着激动的心,用颤抖的手购买了 n (1<= n <=10000)张彩票,满怀期待的等到了开奖的那一天。
小明先仔细阅读了中奖规则:
1、中奖号码是7个由1~33之间各不相同的数组成,每张彩票也是由7个1~33之间不同的数组成。
2、共设置以下奖项
特等奖:7个号码都出现在中奖号码中。
一等奖:6个号码出现在中奖号码中。
二等奖:5个号码出现在中奖号码中。
三等奖:4个号码出现在中奖号码中。
四等奖:3个号码出现在中奖号码中。
五等奖:2个号码出现在中奖号码中。
六等奖:1个号码出现在中奖号码中。
注:不用考虑中奖号码和彩票号码的顺序问题,只要出现即可。
由于购买的彩票可能太多,小明请你写程序帮忙统计他的中奖情况如何。
输入
第一行包含一个正整数 n,表示小明买的彩票张数;
第二行存放了 7 个介于 1 到 33 之间的整数,表示中奖号码;
在随后的 n 行中每行都有 7 个介于 1 到 33 之间的整数,分别表示小明所买的 n 张彩票。
输出
输出小明所买的彩票的中奖情况(中奖的张数)。首先输出特等奖的中奖张数,然后依次输出一等奖至六等奖的中奖张数。
输入样例 复制
2 23 31 1 14 19 17 18 12 8 9 23 1 16 7 11 7 10 21 2 9 31
输出样例 复制
0 0 0 0 0 1 1
code:
#include<bits/stdc++.h>
using namespace std;
long long d[8],c[8],n,v,jd,s[10010],d1,j2,j3,j4,j5,j6,d0;
int main()
{
cin>>n;
for(int i=0;i<=n;i++)
{
if(v==0)
{//先输入可中奖号码
for(int j=1;j<=7;j++) cin>>d[j];
v++;
}
else
{
for(int j=1;j<=7;j++)
{
cin>>c[j];
for(int q=1;q<=7;q++)
if(c[j]==d[q]) jd++;//对比是否中奖 (这里应该可以直接退出循环)
}//第i个彩票中了几等奖
if(jd==1) s[i]=1;
else if(jd==2) s[i]=2;
else if(jd==3) s[i]=3;
else if(jd==4) s[i]=4;
else if(jd==5) s[i]=5;
else if(jd==6) s[i]=6;
else if(jd==7)s[i]=7;
}
memset(c,0,sizeof(c));//清零 (这句应该可以去掉)
jd=0;//清零
}
for(int i=1;i<=n;i++)
{//重新查看每个彩票,统计不同奖的中奖个数
if(s[i]==6) d1++;
else if(s[i]==5) j2++;
else if(s[i]==4) j3++;
else if(s[i]==3) j4++;
else if(s[i]==2) j5++;
else if(s[i]==1) j6++;
else if(s[i]==7) d0++;
}
cout<<d0<<" "<<d1<<" "<<j2<<" "<<j3<<" "<<j4<<" "<<j5<<" "<<j6;
return 0;
}