我的PAT-BASIC代码仓:https://github.com/617076674/PAT-BASIC

原题链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805269828059136

题目描述:

PAT-BASIC1059——C语言竞赛

知识点:素数

思路:用一个大小为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++解题报告:

PAT-BASIC1059——C语言竞赛

 

相关文章: