标签:实现 处理 min 竞赛 访问 std 不能 cst ++
C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛。既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽:
- 0、冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……)。
- 1、排名为素数的学生将赢得最好的奖品 —— 小黄人玩偶!
- 2、其他人将得到巧克力。
给定比赛的最终排名以及一系列参赛者的 ID,你要给出这些参赛者应该获得的奖品。
输入格式:
输入第一行给出一个正整数 N(≤),是参赛者人数。随后 N 行给出最终排名,每行按排名顺序给出一位参赛者的 ID(4 位数字组成)。接下来给出一个正整数 K 以及 K 个需要查询的 ID。
输出格式:
对每个要查询的 ID,在一行中输出
ID: 奖品
,其中奖品或者是Mystery Award
(神秘大奖)、或者是Minion
(小黄人)、或者是Chocolate
(巧克力)。如果所查 ID 根本不在排名里,打印Are you kidding?
(耍我呢?)。如果该 ID 已经查过了(即奖品已经领过了),打印ID: Checked
(不能多吃多占)。输入样例:
6 1111 6666 8888 1234 5555 0001 6 8888 0001 1111 2222 8888 2222
输出样例:
8888: Minion 0001: Chocolate 1111: Mystery Award 2222: Are you kidding? 8888: Checked 2222: Are you kidding?
1 #include <cstdio> 2 #include <cstring> 3 #include <cctype> 4 #include <iostream> 5 #include <sstream> 6 #include <cmath> 7 #include <algorithm> 8 #include <string> 9 #include <stack> 10 #include <queue> 11 #include <vector> 12 #include <map> 13 using namespace std; 14 #define MAXN 10005 15 16 int prime[MAXN]; 17 18 void isprime() //素数筛 19 { 20 memset(prime, 1, sizeof(prime)); //初始化默认都是素数再逐一排除 21 prime[0] = prime[1] = 0; 22 for(int i = 2; i < MAXN; i++) 23 { 24 for(int j = i * 2; j < MAXN; j += i) 25 prime[j] = 0; 26 } 27 } 28 29 int main() 30 { 31 isprime(); 32 int n, k, id, idlast; 33 scanf("%d", &n); 34 int rate[MAXN]; 35 memset(rate, 0, sizeof(rate)); 36 for(int i = 1; i <= n; i++) 37 { 38 scanf("%d", &id); //id的排名 39 rate[id] = i; 40 } 41 scanf("%d", &k); 42 for(int i = 0; i < k; i++) //领奖品 43 { 44 scanf("%d", &idlast); 45 if(rate[idlast] == -1) //id存在且查过了 46 printf("%04d: Checked\n", idlast); 47 else if(rate[idlast] == 1) //排名第一 48 { 49 printf("%04d: Mystery Award\n", idlast); 50 rate[idlast] = -1; 51 } 52 else if(prime[rate[idlast]]) //排名是素数 53 { 54 printf("%04d: Minion\n", idlast); 55 rate[idlast] = -1; 56 } 57 else if(rate[idlast] == 0) //id不存在 58 printf("%04d: Are you kidding?\n", idlast); 59 else //其他排名情况 60 { 61 printf("%04d: Chocolate\n", idlast); 62 rate[idlast] = -1; 63 } 64 } 65 return 0; 66 }
在main函数外面定义的全局整型数组,初值会默认为0 。也就是系统会自动将数组初始化为0 。
一道看似容易实现简单的题,一开始使用素数筛后忘记在主函数中调用……很久才发现。但是也因为这样经过调试后发现,定义在主函数外部的数组系统好像会自动将其初始化为0,难怪调试时,发现全部判断成合数了。发现错误和补漏的能力太欠缺了,其次奖品是chocolate的忘记标记访问了导致测试点2错误……
标签:实现 处理 min 竞赛 访问 std 不能 cst ++
原文地址:https://www.cnblogs.com/Anber82/p/11405624.html