1059. C语言竞赛(20)

原题: 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
", pno);
            stu[pno] = -1;
        } else if (stu[pno] == 0) {
            // 不存在
            printf("%04d: Are you kidding?
", pno);
        } else if (stu[pno] == -1) {
            // 已领过奖品
            printf("%04d: Checked
", pno);
        } else if (isPrime(stu[pno]) == 1) {
            // 排名是素数
            printf("%04d: Minion
", pno);
            stu[pno] = -1;
        } else {
            // 其它情况, 拿到巧克力
            printf("%04d: Chocolate
", 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;
}

原文地址:https://www.cnblogs.com/asheng2016/p/7873775.html