问题来源: PAT1059
本题先使用的string类型进行判断和循环,测试点1,2超时
#include<iostream>
using namespace std;
#include<cmath>
#include<string>
bool Is_Sushu(int num) {
if (num == 1) {
return false;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0)
return false;
}
return true;
}
int main() {
int n;
cin >> n;
string* stu = new string[n];
int* flag=new int[n];
for (int i = 0; i < n; i++) {
cin >> stu[i];
}
int k;
cin >> k;
string s;
int none = 0;
for (int i = 0; i < k; i++) {
cin >> s;
//先判断是否被查阅过,可以避免超时
for (int j = 0; j < n; j++) {
if (s== stu[j]) {
none = 1;
if (flag[j] == 1) {
cout << s << ": Checked" << endl;
flag[j] = 1;
break;
}
else if (j == 0) {
cout << s<< ": Mystery Award" << endl;
flag[j] = 1;
break;
}
else if (Is_Sushu(j + 1)) {
cout << s << ": Minion" << endl;
flag[j] = 1;
break;
}
else {
cout << s << ": Chocolate" << endl;
flag[j] = 1;
break;
}
}
}
if (!none) {
cout << s << ": Are you kidding?" << endl;
}
none = 0;
}
}
接下来转变策略,使用int类型进行计算:
//string慢于int 太折磨了
#include<iostream>
using namespace std;
#include<cmath>
#include<string>
bool Is_Sushu(int num) {
if (num == 1) {
return false;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0)
return false;
}
return true;
}
int main() {
int n;
cin >> n;
int* stu = new int[n];
int* flag = new int[n];
for (int i = 0; i < n; i++) {
cin >> stu[i];
}
int k;
cin >> k;
int s;
int none = 0;
for (int i = 0; i < k; i++) {
cin >> s;
printf("%04d", s);//控制格式 输出前导0
for (int j = 0; j < n; j++) {
if (s == stu[j]) {
none = 1;
if (flag[j] == 1) {
cout << ": Checked" << endl;
flag[j] = 1;
break;
}
else if (j == 0) {
cout << ": Mystery Award" << endl;
flag[j] = 1;
break;
}
else if (Is_Sushu(j + 1)) {
cout << ": Minion" << endl;
flag[j] = 1;
break;
}
else {
cout << ": Chocolate" << endl;
flag[j] = 1;
break;
}
}
}
if (!none) {
cout << ": Are you kidding?" << endl;
}
none = 0;
}
}
运行成功!
气饱了这题ヾ(。`Д´。)ノ彡