-
题目
-
思路
- 分别用三个数组记录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;
}
}
}