我的PAT系列文章更新重心已移至Github石挂,歡迎來(lái)看PAT題解的小伙伴請(qǐng)到Github Pages瀏覽最新內(nèi)容。此處文章目前已更新至與Github Pages同步秒赤。歡迎star我的repo猪瞬。
題目
C 語(yǔ)言競(jìng)賽是浙江大學(xué)計(jì)算機(jī)學(xué)院主持的一個(gè)歡樂的競(jìng)賽。既然競(jìng)賽主旨是為了好玩入篮,頒獎(jiǎng)規(guī)則也就制定得很滑稽:
- 0陈瘦、冠軍將贏得一份“神秘大獎(jiǎng)”(比如很巨大的一本學(xué)生研究論文集……)。
- 1潮售、排名為素?cái)?shù)的學(xué)生將贏得最好的獎(jiǎng)品 —— 小黃人玩偶痊项!
- 2锅风、其他人將得到巧克力。
給定比賽的最終排名以及一系列參賽者的 ID鞍泉,你要給出這些參賽者應(yīng)該獲得的獎(jiǎng)品遏弱。
輸入格式:
輸入第一行給出一個(gè)正整數(shù) ( ),是參賽者人數(shù)塞弊。隨后 行給出最終排名漱逸,每行按排名順序給出一位參賽者的 ID(4
位數(shù)字組成)。接下來(lái)給出一個(gè)正整數(shù) 以及 個(gè)需要查詢的 ID游沿。
輸出格式:
對(duì)每個(gè)要查詢的 ID饰抒,在一行中輸出 ID: 獎(jiǎng)品
,其中獎(jiǎng)品或者是 Mystery Award
(神秘大獎(jiǎng))诀黍、或者是 Minion
(小黃人)袋坑、或者是
Chocolate
(巧克力)。如果所查 ID 根本不在排名里眯勾,打印 Are you kidding?
(耍我呢枣宫?)。如果該 ID
已經(jīng)查過(guò)了(即獎(jiǎng)品已經(jīng)領(lǐng)過(guò)了)吃环,打印 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?
思路
也幾乎沒有難度,記錄5種狀態(tài):沒有排名郁轻、三種獎(jiǎng)勵(lì)和已經(jīng)查過(guò)翅娶。
還有不要把素?cái)?shù)看成奇數(shù)(不要問我怎么知道的)
代碼
最新代碼@github,歡迎交流
#include <stdio.h>
int isPrime(int n)
{
if(n == 1) return 0;
for(int i = 2; i * i <= n; i++)
if(n % i == 0)
return 0;
return 1;
}
int main()
{
int award[10000] = {0}, N, K, ID;
scanf("%d", &N);
for(int i = 0; i < N; i++)
{
scanf("%d", &ID);
if(i == 0) award[ID] = 1;
else if(isPrime(i + 1)) award[ID] = 2;
else award[ID] = 3;
}
scanf("%d", &K);
for(int i = 0; i < K; i++)
{
scanf("%d", &ID);
switch(award[ID])
{
case 0: printf("%04d: Are you kidding?\n", ID); break;
case 1: printf("%04d: Mystery Award\n", ID); award[ID] = 4; break;
case 2: printf("%04d: Minion\n", ID); award[ID] = 4; break;
case 3: printf("%04d: Chocolate\n", ID); award[ID] = 4; break;
case 4: printf("%04d: Checked\n", ID); break;
}
}
return 0;
}