您的位置:首页 > 编程语言 > C语言/C++

PAT 1059. C语言竞赛(20)

2018-02-24 21:20 387 查看
题目描述:
C语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛。既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽:0. 冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……)。
1. 排名为素数的学生将赢得最好的奖品 —— 小黄人玩偶!
2. 其他人将得到巧克力。给定比赛的最终排名以及一系列参赛者的ID,你要给出这些参赛者应该获得的奖品。输入格式:输入第一行给出一个正整数N(<=10000),是参赛者人数。随后N行给出最终排名,每行按排名顺序给出一位参赛者的ID(4位数字组成)。接下来给出一个正整数K以及K个需要查询的ID。输出格式:对每个要查询的ID,在一行中输出“ID: 奖品”,其中奖品或者是“Mystery Award”(神秘大奖)、或者是“Minion”(小黄人)、或者是“Chocolate”(巧克力)。如果所查ID根本不在排名里,打印“Are you kidding?”(耍我呢?)。如果该ID已经查过了(即奖品已经领过了),打印“ID: Checked”(不能多吃多占)。
输入样例:
6
1111
6666
8888
1234
5555
0001
6
8888
0001
1111
2222
8888
2222
输出样例:
8888: Minion
0001: Chocolate
1111: Mystery Award
2222: Are you kidding?
8888: Checked
2222: Are you kidding?
分析:
笔者设立了一个结构体,在录入id时,将奖品等信息进行录入,并按照id作为数组下标存储每一位考生的结构体。
代码如下:
#include<iostream>
#include<string>
#include<math.h>
#include<iomanip>
using namespace std;
const int maxn=10000;
struct competitor{             //设置参赛者结构体,成员:ID,奖品,查询标记 
int ID;
string prize;
bool flag;
competitor(){
flag=false;ID=-1;    //成员初始化 
}
}stu[maxn];
bool is_prime(int n){              //判断素数的函数。 
int temp=(int)sqrt(1.0*n);     //1.0*n是为了将n转换成double类型,这是平方根sqrt函数的要求 
for(int i=2;i<=temp;i++){       
if(n%i==0){
return false;          //如果2~根号n之间找到一个因数,就不是素数,返回false。 
}
}
return true;                //是素数 
}
 int main()
 {
  int n,k,chaxun[maxn],id;
  cin>>n;            //读入考生人数 
  for(int i=1;i<=n;i++){
  cin>>id;        //读入考生ID 
  stu[id].ID =id; //将考生ID写入到自己的成员中,以ID作为下标,方便查询 
  if(i==1){              //按照录入顺序就是排名, 
  stu[id].prize ="Mystery Award";   //第一名的奖品写入到结构体成员prize中 
}
else if(is_prime(i)){
stu[id].prize ="Minion";           //每次为素数的,写入相应奖品 
}
else stu[id].prize ="Chocolate";      //其余人的奖品写入 
}
cin>>k;              //读入待查询人数 
for(int i=1;i<=k;i++){
cin>>chaxun[i];   //读入所有的待查询ID 
}
for(int i=1;i<=k;i++){ 
if(stu[chaxun[i]].ID ==chaxun[i]){   //如果排名中有这个人的ID 
if(stu[chaxun[i]].flag ==false){   //并且奖品还没有被领过 
cout<<setfill('0')<<setw(4)<<chaxun[i]<<": "<<stu[chaxun[i]].prize<<endl;//按照格式输出,记得ID是四位数字 
stu[chaxun[i]].flag =true;     //将标记该位true,说明该考生已经领过奖品 
}
else {
cout<<setfill('0')<<setw(4)<<chaxun[i]<<": "<<"Checked"<<endl;  //领过奖品了,按照格式输出 
}
}
else {
    cout<<setfill('0')<<setw(4)<<chaxun[i]<<": "<<"Are you kidding?"<<endl;  //找不到要查询的id 
}
}

 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PAT