P2550 [AHOI2001]彩票摇奖
题目描述:
思路:这道题思路很简单,就是先让你输入一个固定的中奖号码,再输入n行彩票号码(即小明买了n张彩票),将每行彩票号码与中奖号码进行比对,记录彩票号码中出现的中奖号码数字的次数,比如例子12 8 9 23 1 16 7与中奖号码23 31 1 14 19 17 18比对,出现了23和1这两个数字,根据题目要求该号码获得了五等奖,即在输出数组中的a[5]处加1,表示中了一次五等奖;同理,11 7 10 21 2 9 31中只有中奖号码数字31出现了1次,根据题目该号码获得了六等奖,即在对应输出数组中的a[6]处加1,表示中了一次六等奖。
题目分析到这里,我说一说我在这道题上踩的坑,首先我看到题目最后测试数据规模为1<=n<1000,就鬼使神差地把数组范围设成了1000多,实际上这道题完全不需要那么大的数组,这个n代表的是我们循环的次数,与数组本身无关,在进行数据比较操作的时候实际上只是那7个数字进行比较,所以我们只需要设置一个长度为7的存储中奖号码的a数组,和一个长度一样为7的最后输出的中奖数组flag。这个程序的核心实际上是一个while循环嵌套一个两层的for循环(实现比较),这道题就AC了。
上代码:
#include<cstdio>
#include<cstring>
using namespace std;
int a[7];
int flag[7];
int main(){
int n;
int m;
while(scanf("%d",&n)!=EOF){
//中奖号码
int cnt = 0;
//这里为了保险,我把flag数组初始化为0
memset(flag,0,