我的PAT-BASIC代码仓:https://github.com/617076674/PAT-BASIC
原题链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805269828059136
题目描述:
知识点:素数
思路:用一个大小为10000的数组记录奖品,另一个大小为10000的数组记录是否已查过
时间复杂度是O(N)。空间复杂度是O(10000)。
C++代码:
#include<iostream>
#include<string>
#include<math.h>
using namespace std;
bool isPrime(int num);
int main() {
int N;
cin >> N;
string prizes[10000];
bool flags[10000];
for(int i = 0; i < 10000; i++) {
flags[i] = false;
}
int tempNum;
for(int i = 0; i < N; i++) {
cin >> tempNum;
if(i == 0) {
prizes[tempNum] = "Mystery Award";
} else if(isPrime(i + 1)) {
prizes[tempNum] = "Minion";
} else {
prizes[tempNum] = "Chocolate";
}
}
int K;
cin >> K;
for(int i = 0; i < K; i++) {
cin >> tempNum;
if(!flags[tempNum]) {
if(prizes[tempNum].length() != 0) {
printf("%04d: ", tempNum);
cout << prizes[tempNum] << endl;
flags[tempNum] = true;
} else {
printf("%04d: ", tempNum);
cout << "Are you kidding?" << endl;
}
} else {
printf("%04d: ", tempNum);
cout << "Checked" << endl;
}
}
return 0;
}
bool isPrime(int num) {
if(num == 1) {
return false;
}
for(int i = 2; i <= sqrt(num); i++) {
if(num % i == 0) {
return false;
}
}
return true;
}
C++解题报告: