PAT (Basic Level) Practice (中文)1059 C語言競賽 (20 分)(C實現)

題目描述:

C 語言競賽是浙江大學計算機學院主持的一個歡樂的競賽。既然競賽主旨是爲了好玩,頒獎規則也就制定得很滑稽:

0、冠軍將贏得一份“神祕大獎”(比如很巨大的一本學生研究論文集……)。
1、排名爲素數的學生將贏得最好的獎品 —— 小黃人玩偶!
2、其他人將得到巧克力。

給定比賽的最終排名以及一系列參賽者的 ID,你要給出這些參賽者應該獲得的獎品。

輸入格式:

輸入第一行給出一個正整數 N104N(≤10^4),是參賽者人數。隨後 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?

代碼示例(C實現)

#include <stdio.h>
#include <math.h>

int isS(int level);

/*
 * ids[i] 1:表示存在 2:表示重複出現 0:表示不存在
 */
int main()
{
    int count = 0;
    scanf("%d", &count);
    // 聲明一個存儲 id 的數組
    int ids[10000];
    int orders[10000];
    for (int i = 0; i < 10000; i++)
    {
        ids[i] = 0;
        orders[i] = 0;
    }
    for (int i = 0; i < count; i++)
    {
        int id = 0;
        scanf("%d", &id);
        ids[id] = 1;
        orders[id] = i + 1;
    }
    int persons = 0;
    scanf("%d", &persons);
    for (int i = 0; i < persons; i++)
    {
        int personId = 0;
        scanf("%d", &personId);
        // 如果不存在
        if (ids[personId] == 0)
        {
            printf("%04d: Are you kidding?\n", personId);
        } 
        else
        {
            // 如果存在多次
            if (ids[personId] == 2) 
            {
                printf("%04d: Checked\n", personId);
            }
            else
            {
                // 如果排名是 1
                if (orders[personId] == 1)
                {
                    printf("%04d: Mystery Award\n", personId);
                }
                // 如果排名是素數
                else if (isS(orders[personId]))
                {
                    printf("%04d: Minion\n", personId);
                }
                // 其他情況
                else
                {
                    printf("%04d: Chocolate\n", personId);
                }
                ids[personId]++;
            }
        }
    }

    return 0;
}

int isS(int num) 
{
    if (num <= 3) 
    {
        return num > 1;
    }
    // 不在6的倍數兩側的一定不是質數
    if (num % 6 != 1 && num % 6 != 5) 
    {
        return 0;
    }
    int sqrtValue = sqrt(num);
    for (int i = 5; i <= sqrtValue; i += 6) 
    {
        if (num % i == 0 || num % (i + 2) == 0) 
        {
            return 0;
        }
    }
    return 1;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章