题目:1059 C语言竞赛 (20 分)

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?

思路:

  • 开个数组rate【MAXN】整型数组,初始化为0后,记录输入的对应id排名。接下来按题目要求打印查询结果,但是要记住,只要id存在,访问后就要做上访问过的标记,可以另外开个标记数组,也可以直接将其排名置为-1,表示已经领过。id是四位数字,定义成整形后输出是要确保四位数,不足补零,采用 %04d 的格式。因为系统会在输入后自动保留有效数字,而把前面的多余的0掉。
  • 判断素数可以使用素数筛进行预处理(先存储好,可直接用),或者直接使用能被1和本身之外的数整除来判断是不是素数(边输入边判断)。

代码:

 #include <cstdio>
#include <cstring>
#include <cctype>
#include <iostream>
#include <sstream>
#include <cmath>
#include <algorithm>
#include <string>
#include <stack>
#include <queue>
#include <vector>
#include <map>
using namespace std;
#define MAXN 10005 int prime[MAXN]; void isprime() //素数筛
{
memset(prime, , sizeof(prime)); //初始化默认都是素数再逐一排除
prime[] = prime[] = ;
for(int i = ; i < MAXN; i++)
{
for(int j = i * ; j < MAXN; j += i)
prime[j] = ;
}
} int main()
{
isprime();
int n, k, id, idlast;
scanf("%d", &n);
int rate[MAXN];
memset(rate, , sizeof(rate));
for(int i = ; i <= n; i++)
{
scanf("%d", &id); //id的排名
rate[id] = i;
}
scanf("%d", &k);
for(int i = ; i < k; i++) //领奖品
{
scanf("%d", &idlast);
if(rate[idlast] == -) //id存在且查过了
printf("%04d: Checked\n", idlast);
else if(rate[idlast] == ) //排名第一
{
printf("%04d: Mystery Award\n", idlast);
rate[idlast] = -;
}
else if(prime[rate[idlast]]) //排名是素数
{
printf("%04d: Minion\n", idlast);
rate[idlast] = -;
}
else if(rate[idlast] == ) //id不存在
printf("%04d: Are you kidding?\n", idlast);
else //其他排名情况
{
printf("%04d: Chocolate\n", idlast);
rate[idlast] = -;
}
}
return ;
}

总结:

  在main函数外面定义的全局整型数组,初值会默认为0 。也就是系统会自动将数组初始化为0 。
  一道看似容易实现简单的题,一开始使用素数筛后忘记在主函数中调用……很久才发现。但是也因为这样经过调试后发现,定义在主函数外部的数组系统好像会自动将其初始化为0,难怪调试时,发现全部判断成合数了。发现错误和补漏的能力太欠缺了,其次奖品是chocolate的忘记标记访问了导致测试点2错误……

最新文章

  1. 了解了下spring boot,说一下看法
  2. 使用CLion编辑C工程
  3. MYSQL数据库忘记密码
  4. 想要学好JQuery看这里
  5. linux 下 jdk tar.gz 包安装方法
  6. 嵌入式 VFS: Cannot open root device &quot;mtdblock2&quot; or unknown-block(2,0)
  7. ADO.NET 快速入门(七):使用数据库事务
  8. 关于css中的align-content属性详解
  9. FFT —— 快速傅里叶变换
  10. OR导致笛卡尔积
  11. 在Angular中,如果权限值是异步请求所得,如何将其设置为HTTP请求头的Authorization?
  12. gitlab实时备份方案(非官方命令)
  13. # C# 如何调用动态连接库?
  14. [ArcGIS]ArcGIS Server环境搭建,发布服务,以及使用ArcGIS API for JavaScript
  15. C++自定义NULLPTR
  16. js方法的积累
  17. C# Invoke方法
  18. iOS 新浪微博-5.1 首页微博列表_时间/配图
  19. JAVA基础3---运算符大全
  20. 阿里巴巴Dubbo实现的源码分析

热门文章

  1. 8. react 基础 - props 默认值和类型限制 与 Props , State , render 函数 关系
  2. 牛客——Rabbit的字符串
  3. Nginx复习
  4. c++ 排序 冒泡 插入 选择 快速
  5. dirname() 函数返回路径中的目录部分。
  6. 批量导出数据库表(oracle)
  7. ftp主动和被动模式区别
  8. TensorFlow(一)
  9. Thread--生产者消费者假死分析
  10. idHttpServer接收类型