1. 程式人生 > >PAT-B1059. C語言競賽

PAT-B1059. C語言競賽

1059. C語言競賽(20)

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

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

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

輸入格式:

輸入第一行給出一個正整數N(<=10000),是參賽者人數。隨後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?

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <map> #include <cmath> using namespace std; // 檢驗輸出陣列 int checked[10000] = {0}; // 判斷是否是素數 bool isPrime(int n) { if(n == 1) { return false; } for(int i = 2; i <= sqrt(n); i++) { if(n % i == 0) { return false; } } return true; } int
main(){ int n; map<int, string> list; int id; cin>>n; for(int i = 1; i <= n; i++) { cin>>id; if(i == 1) { list[id] = "Mystery Award"; } else if(isPrime(i)) { list[id] = "Minion"; } else { list[id] = "Chocolate"; } } int m; cin>>m; map<int, string>::iterator iter; for(int i = 0; i < m; i++) { cin>>id; if(!checked[id]) { // 如果ID不存在 iter = list.find(id); if(iter == list.end()) { printf("%04d", id); cout<<": "<<"Are you kidding?"<<endl; } else { printf("%04d", id); cout<<": "<<list[id]<<endl; checked[id] = 1; } } else { // 如果id已查詢 printf("%04d", id); cout<<": "<<"Checked"<<endl; } } return 0; }