PAT-B1059. C語言競賽
阿新 • • 發佈:2019-02-16
1059. C語言競賽(20)
C語言競賽是浙江大學計算機學院主持的一個歡樂的競賽。既然競賽主旨是為了好玩,頒獎規則也就制定得很滑稽:
- 冠軍將贏得一份“神祕大獎”(比如很巨大的一本學生研究論文集……)。
- 排名為素數的學生將贏得最好的獎品 —— 小黃人玩偶!
- 其他人將得到巧克力。
給定比賽的最終排名以及一系列參賽者的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;
}