广西建设领域证书查询官方网站,中国建设部网站能查叉车证,网络服务昭通学院,模板工题目
C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛。既然竞赛主旨是为了好玩#xff0c;颁奖规则也就制定得很滑稽#xff1a;
0、冠军将赢得一份“神秘大奖”#xff08;比如很巨大的一本学生研究论文集……#xff09;。1、排名为素数的学生将赢得最好的奖品 —…题目
C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛。既然竞赛主旨是为了好玩颁奖规则也就制定得很滑稽
0、冠军将赢得一份“神秘大奖”比如很巨大的一本学生研究论文集……。1、排名为素数的学生将赢得最好的奖品 —— 小黄人玩偶2、其他人将得到巧克力。
给定比赛的最终排名以及一系列参赛者的 ID你要给出这些参赛者应该获得的奖品。
输入格式
输入第一行给出一个正整数 N≤104 是参赛者人数。随后 N 行给出最终排名每行按排名顺序给出一位参赛者的 ID4 位数字组成。接下来给出一个正整数 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作为结构体数组的下标。而id是固定的4位数字0000-9999只需把字符串类型转为对应的数即可使用ASCII码。查询的时候只需要把待查询id转为数字再输出相应信息即可。例如0000转为00001转为1.
AC代码
第一版
#includeiostream
#includestring
#includecmath
using namespace std;
struct Player
{int id,award,status;
};int main()
{bool is_prime(int i);Player p[10000];int i,k,n,temp0;string id;cinn;for(i0; i10000; i){p[i].award-1;p[i].status0;}for(i1; in; i){cinid;temp(id[0]-0)*1000(id[1]-0)*100(id[2]-0)*10id[3]-0;if(i1)p[temp].award0;else if(is_prime(i)true){p[temp].award1;}else{p[temp].award2;}p[temp].idtemp;}cink;for(i0; ik; i){cinid;temp(id[0]-0)*1000(id[1]-0)*100(id[2]-0)*10id[3]-0;if(p[temp].status1){coutid: Checkedendl;continue;}if(p[temp].award0)coutid: Mystery Award;else if(p[temp].award1)coutid: Minion;else if(p[temp].award2)coutid: Chocolate;else{coutid: Are you kidding?endl;continue; }p[temp].status1;coutendl;}return 0;
}
bool is_prime(int n)
{if(n2||n3) return true;int tempceil(sqrt((double)n));for(int i2; itemp; i){if(n%i0) return false;}return true;
}第二版(去掉id)
#includeiostream
#includestring
#includecmath
using namespace std;
struct Player
{int award,status;
};int main()
{bool is_prime(int i);Player p[10000];int i,k,n,temp0;string id;cinn;for(i0; i10000; i){p[i].award-1;p[i].status0;}for(i1; in; i){cinid;temp(id[0]-0)*1000(id[1]-0)*100(id[2]-0)*10id[3]-0;if(i1)p[temp].award0;else if(is_prime(i)true){p[temp].award1;}else{p[temp].award2;}}cink;for(i0; ik; i){cinid;temp(id[0]-0)*1000(id[1]-0)*100(id[2]-0)*10id[3]-0;if(p[temp].status1){coutid: Checkedendl;continue;}if(p[temp].award0)coutid: Mystery Award;else if(p[temp].award1)coutid: Minion;else if(p[temp].award2)coutid: Chocolate;else{coutid: Are you kidding?endl;continue; }p[temp].status1;coutendl;}return 0;
}
bool is_prime(int n)
{if(n2||n3) return true;int tempceil(sqrt((double)n));for(int i2; itemp; i){if(n%i0) return false;}return true;
}更多题解 PAT 乙级(Basic Level) 题解汇总持续更新(C)