-
题目


-
思路
- 分别用三个数组记录id的排名、是否存在、是否被查询过,后续根据条件进行判断、输出即可
#include <stdio.h>
#include <cmath>
using namespace std;
bool isPrime(int n){
bool flag=true; //表示是素数
if(n<=1){
flag=false;
}else{
int sqr=sqrt(n*1.0);
for(int i=2;i<sqr+1;i++){
if(n%i==0){
flag=false;
}
}
}
return flag;
}
int main(){
int n,temp;
scanf("%d",&n);
int r[10000],isChecked[10000],rec[10000]={0};
for(int i=1;i<=n;i++){
scanf("%d",&temp);
r[temp]=i; //记录某id对应的排名
isChecked[temp]=0; //记录某id是否已被查询过,初始化为全部未查询
rec[temp]=1;
}
//开始查询
int k;
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d",&temp);
printf("%04d: ",temp);
if(!rec[temp]){ //查询的人不存在
printf("Are you kidding?\n");
}else if(isChecked[temp]){ //已经查询过了
printf("Checked\n");
continue;
}else{
if(r[temp]==1){ //冠军
printf("Mystery Award\n");
}else if(isPrime(r[temp])){ //排名是素数
printf("Minion\n");
}else{ //其他
printf("Chocolate\n");
}
isChecked[temp]=1;
}
}
}
本文介绍了一个使用C++实现的程序,该程序通过输入参赛者的ID和成绩,然后根据成绩的排名是否为素数来决定给予参赛者不同的奖励。程序首先定义了一个判断素数的函数isPrime,接着读取参赛者的数量和每个参赛者的ID及成绩,记录每个ID的排名。然后,程序接收查询请求,根据查询的ID检查参赛者是否存在、是否已查询过,并根据排名是否为1或素数输出不同的奖励。
386

被折叠的 条评论
为什么被折叠?



