首页 专栏 c++ 文章详情
关注作者
关注作者
0
PAT_甲级_1116 Come on! Let's C
乔梓鑫 发布于 2 月 26 日
题目大意
给定一个长度为N的排名列表和长度为K的查询列表,需要你按照如下规则输出每一个查询的结果.
1、排名第一的获得Mystery Award奖品 2、排名为素数的获得Minion奖品 3、所有其他参加比赛的人均获得Chocolate奖品 4、对于非法查询输出Are you kidding? 5、对于重复查询输出Checked算法思路
按照规则模拟即可,使用valid数组记录合法的输入,Rank记录每一个人的排名,checked数组记录已经查询的记录,对于每一次查询,首先判断是否合法,如果合法再判断是否已经查询过,如果没有,就按照1,2,3规则进行查询即可,最后得将checked[query]置为true
提交结果
AC代码
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
int valid[10000];
int checked[10000];
int Rank[10000];
bool isPrime(int x){
if(n<=1) return false;
int n = (int)sqrt(x*1.0);
for(int i=2;i<=n;++i){
if(x%i==0){
return false;
}
}
return true;
}
int main() {
int n;
scanf("%d",&n);
vector<int> v(n);
for(int i=0;i<n;++i){
scanf("%d",&v[i]);
valid[v[i]] = true;
Rank[v[i]] = i+1;
}
int k;
scanf("%d",&k);
for(int i=0;i<k;++i){
int query;
scanf("%d",&query);
if(!valid[query]){
printf("%04d: Are you kidding?\n",query);
}else{
if(checked[query]){
printf("%04d: Checked\n",query);
}else if(query==v[0]){
printf("%04d: Mystery Award\n",query);
}else if(isPrime(Rank[query])){
printf("%04d: Minion\n",query);
}else{
printf("%04d: Chocolate\n",query);
}
checked[query] = true;
}
}
return 0;
}
c++ 数据结构和算法
阅读 30 发布于 2 月 26 日
赞
收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
PAT题解
关注专栏
乔梓鑫
主要分享个人学习经验和心得
468 声望
5 粉丝
0 条评论
得票 时间
提交评论
乔梓鑫
主要分享个人学习经验和心得
468 声望
5 粉丝
宣传栏
目录
▲
题目大意
给定一个长度为N的排名列表和长度为K的查询列表,需要你按照如下规则输出每一个查询的结果.
1、排名第一的获得Mystery Award奖品 2、排名为素数的获得Minion奖品 3、所有其他参加比赛的人均获得Chocolate奖品 4、对于非法查询输出Are you kidding? 5、对于重复查询输出Checked算法思路
按照规则模拟即可,使用valid数组记录合法的输入,Rank记录每一个人的排名,checked数组记录已经查询的记录,对于每一次查询,首先判断是否合法,如果合法再判断是否已经查询过,如果没有,就按照1,2,3规则进行查询即可,最后得将checked[query]置为true
提交结果
AC代码
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
int valid[10000];
int checked[10000];
int Rank[10000];
bool isPrime(int x){
if(n<=1) return false;
int n = (int)sqrt(x*1.0);
for(int i=2;i<=n;++i){
if(x%i==0){
return false;
}
}
return true;
}
int main() {
int n;
scanf("%d",&n);
vector<int> v(n);
for(int i=0;i<n;++i){
scanf("%d",&v[i]);
valid[v[i]] = true;
Rank[v[i]] = i+1;
}
int k;
scanf("%d",&k);
for(int i=0;i<k;++i){
int query;
scanf("%d",&query);
if(!valid[query]){
printf("%04d: Are you kidding?\n",query);
}else{
if(checked[query]){
printf("%04d: Checked\n",query);
}else if(query==v[0]){
printf("%04d: Mystery Award\n",query);
}else if(isPrime(Rank[query])){
printf("%04d: Minion\n",query);
}else{
printf("%04d: Chocolate\n",query);
}
checked[query] = true;
}
}
return 0;
}