1059 C语言竞赛 (20 point(s))
作者:互联网
// 10
#include <bits/stdc++.h>
using namespace std;
struct Stu{
int rank, existed;
};
bool prime(int p){
for(int i = 2; i <= sqrt(p); i++)
if(p % i == 0) return false;
return true;
}
int main() {
int n, k;
map<string, Stu> stu;
cin >> n;
for(int i = 1; i <= n; i++){
string tmp;
cin >> tmp;
// 初始化查询标记 false
stu[tmp] = {i, false};
}
cin >> k;
while(k--){
string tmp;
cin >> tmp;
// 找ID 是否存在
// 不存在情况
if(stu.find(tmp) == stu.end()) cout << tmp << ": Are you kidding?" << endl;
// 存在是否已查
else if(stu[tmp].existed == true) cout << tmp << ": Checked" << endl;
else{
if(stu[tmp].rank == 1) cout << tmp << ": Mystery Award" << endl;
else if(prime(stu[tmp].rank)) cout << tmp << ": Minion" << endl;
else cout << tmp << ": Chocolate" << endl;
// 标记已经领取
stu[tmp].existed = true;
}
}
}
Float Point Exception 刚才获得了这个评测错误,一查才知道叫做浮点数错误。当时还在想,好像主程序里面没有任何有关除法的运算吧。一看别人的说明,原来求余也会导致这个错误,而求余也就在素数的判断中会存在了。因为不小心把因数的范围从 0 开始了,但是判断实际上应该从 2 开始。
这题刚开始没有说排名的顺序到底是从 0 开始,还是从1 开始,试了试才知道是从 1 开始。
之前有几题不会写容器的引用传递,虽然现在会了,就是跟基本数据类型一样在参数定义的时候加一个 & 即可。
看了下别人的代码,除了传递引用之外,也可以把容器定义成全局的,这样就可以在直接在函数里面调用,而不必担心不会写引用传递了。(如果担心容器爆了栈内存的话,也可以放在全局)
标签:tmp,容器,20,point,int,1059,cin,stu 来源: https://www.cnblogs.com/Atl212/p/15232177.html