写在前面
- 实现思路
- 质数 / 素数判断函数
- 字符串容器数组封装打印结果集
- 读入初始输入并标记奖励
award
类型 - 格式控制打印输出,
- 已查询过的ID,迭代更新状态
- 题目简单,15分钟a题
测试用例
input:
6
1111
6666
8888
1234
5555
0001
6
8888
0001
1111
2222
8888
2222
output:
8888: Minion
0001: Chocolate
1111: Mystery Award
2222: Are you kidding?
8888: Checked
2222: Are you kidding?
ac代码
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
bool isprime(int a)
{
if(a<=1) return false;
for(int i=2; i*i<=a; i++)
{
if(a%i==0)
return false;
}
return true;
}
int main()
{
vector<string> vs = {"", "Mystery Award", "Minion", "Chocolate", "Are you kidding?"};
int n, k, tmps;
scanf("%d", &n);
unordered_map<int, int> maps;
for(int i=1; i<=n; i++)
{
scanf("%d", &tmps);
if(i==1)
maps[tmps] = 1;
else if(isprime(i))
maps[tmps] = 2;
else
maps[tmps] = 3;
}
scanf("%d", &n);
for(int i=1; i<=n; i++)
{
scanf("%d", &tmps);
printf("%04d: ", tmps);
if(maps[tmps]==5)
printf("Checked\n");
else if (maps[tmps]<=0)
printf("Are you kidding?\n");
else
{
printf("%s\n", vs[maps[tmps]].c_str());
maps[tmps] = 5;
}
}
return 0;
}
学习代码
- 思路参考
- ran数组标记每个id对应的排名,集合ss存储所有已经询问过的id
- 当前id已经出现在ss中,则输出“Checked”
- ran[id] == 0说明当前id不不在排名列列表中,所以输出“Are you kidding?”
- ran[id]为1则输出“Minion”,
- ran[id]为素数则输出“Mystery Award”
- 否则输出“Chocolate”
#include <iostream>
#include <set>
#include <cmath>
using namespace std;
int ran[10000];
bool isprime(int a)
{
if(a <= 1) return false;
int Sqrt = sqrt((double)a);
for(int i = 2; i <= Sqrt; i++)
{
if(a % i == 0)
return false;
}
return true;
}
int main()
{
int n, k;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
int id;
scanf("%d", &id);
ran[id] = i + 1;
}
scanf("%d", &k);
set<int> ss;
for(int i = 0; i < k; i++)
{
int id;
scanf("%d", &id);
printf("%04d: ", id);
if(ran[id] == 0)
{
printf("Are you kidding?\n");
continue;
}
if(ss.find(id) == ss.end())
{
ss.insert(id);
}
else
{
printf("Checked\n");
continue;
}
if(ran[id] == 1)
{
printf("Mystery Award\n");
}
else if(isprime(ran[id]))
{
printf("Minion\n");
}
else
{
printf("Chocolate\n");
}
}
return 0;
}
知识点小结
// 集合查找
if(ss.find(id) == ss.end())
// 字符串数组
vector<string> vs = {"", "Mystery Award", "Minion", "Chocolate", "Are you kidding?"};
// 字符串数组定义、初始化、遍历
string names[5]= {"Zhang","Li","Fun","Wang","Tan"};
for(auto name : names)
cout << name << endl;