您的位置:首页 > 编程语言 > C语言/C++

1059. C语言竞赛(20)

2017-11-21 16:25 323 查看

原题: https://www.patest.cn/contests/pat-b-practise/1059

思路: 参赛者id是数组下标, 数组值是参赛者排名位置(从1开始),
每次判断0不存在, -1领过奖了, 其它就是位置序号.

实现:

#include <stdio.h>
#define LEN 10010
int isPrime (int n);
// -1 领过奖了 0不存在 其它就是位置序号
int main (void) {
int pnum;
int snum;
int stu[LEN] = {0};
int pno;
int i;

scanf("%d", &pnum);
for (i = 1; i <= pnum; i++) {
scanf("%d", &pno);
stu[pno] = i;
}
scanf("%d", &snum);
for (i = 1; i <= snum; i++) {
scanf("%d", &pno);
if (stu[pno] == 1) {
// 第一名
printf("%04d: Mystery Award\n", pno);
stu[pno] = -1;
} else if (stu[pno] == 0) {
// 不存在
printf("%04d: Are you kidding?\n", pno);
} else if (stu[pno] == -1) {
// 已领过奖品
printf("%04d: Checked\n", pno);
} else if (isPrime(stu[pno]) == 1) {
// 排名是素数
printf("%04d: Minion\n", pno);
stu[pno] = -1;
} else {
// 其它情况, 拿到巧克力
printf("%04d: Chocolate\n", pno);
stu[pno] = -1;
}
}

return 0;
}

// 0不是素数 1是素数
// 从2开始
int isPrime (int n) {
int i = 2;
while (i * i <= n) {
if (n % i == 0) return 0;
i++;
}
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: