思路:
1.用两个大数组分别存储每个参赛者的rank,存储参赛者信息是否已被查阅;
2.先判断参赛者的rank是不是0,如果是0则未参赛;
3.其次查阅参赛者信息是否已被查阅;
4.再判断他的rank是不是1;
5.然后判断rank是不是素数;
6.剩下的都拿巧克力;
7.查阅后记得更新查阅数组;
代码:
#include<iostream>
#include<cmath>
int list[10000],hasChecked[10000];
using namespace std;
bool isPrime(int n){
if(n<2) return false;
int sqr=sqrt(n);
for(int i=2;i<=sqr;i++)
if(n%i==0) return false;
return true;
}
int main(){
int n,id,k;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&id);
list[id]=i;
}
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d",&id);
if(list[id]==0) printf("%04d: Are you kidding?
",id);
else{
if(hasChecked[id]>0) printf("%04d: Checked
",id);
else if(list[id]==1) printf("%04d: Mystery Award
",id);
else if(isPrime(list[id])) printf("%04d: Minion
",id);
else printf("%04d: Chocolate
",id);
hasChecked[id]=1;
}
}
return 0;
}