题意
给你一个整数n,n个人的id(4位数组成),接下来给出k次查询,问查询的id 符合哪种情况
思路
1.判断是否是第一名,再判断是否领过
2.判断是否是素数,再判断是否领过
3.其余的再进行判断是否领过
4.其他的即为不存在的
坑点
无
代码
#include <bits/stdc++.h>
using namespace std;
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;
cin >> n;
map<string,int> m; //key和value分别存放ID和排名
for (int i = 0; i < n; i++)
{
string temp;
cin >> temp;
m[temp] = i+1; //记录ID和排名
}
int k;
cin >> k;
map<string,int> flag; //判断奖品是否已被领取,1为被领取
for (int i = 0; i < k; i++)
{
string temp,award;
cin >> temp;
if(m[temp]!=0)
{
if(m[temp] == 1) //冠军将赢得一份“神秘大奖”
{
if(flag[temp] == 0) //若学生的奖品还未被领取
{
award = "Mystery Award";
flag[temp] = 1; //领完奖之后记得标记
}
else //领过了
{
award = "Checked";
}
}
else if(isPrime(m[temp])) //排名为素数的学生将赢得最好的奖品 —— 小黄人玩偶!
{
if(flag[temp] == 0)
{
award = "Minion";
flag[temp] = 1;
}
else
{
award = "Checked";
}
}
else //其他人将得到巧克力
{
if(flag[temp] == 0)
{
award = "Chocolate";
flag[temp] = 1;
}
else
{
award = "Checked";
}
}
cout << temp << ": " << award << endl;
}
else
{
cout << temp << ": Are you kidding?" << endl;
}
}
return 0;
}
总结
难度稍难,细节较多,需多注意