PAT基础级-钻石段位样卷1
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤的数值是公斤数值的两倍。现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧……)
输入格式:
输入第一行给出一个正整数H
(100 < H ≤ 300),为某人身高。
输出格式:
在一行中输出对应的标准体重,单位为市斤,保留小数点后1位。
输入样例:
169
输出样例:
124.2
#include <iostream> using namespace std; int main() { double N; scanf("%lf", &N); printf("%.1f", (N - 100) * 1.8); return 0; }
你永远叫不醒一个装睡的人 —— 但是通过分析一个人的呼吸频率和脉搏,你可以发现谁在装睡!医生告诉我们,正常人睡眠时的呼吸频率是每分钟15-20次,脉搏是每分钟50-70次。下面给定一系列人的呼吸频率与脉搏,请你找出他们中间有可能在装睡的人,即至少一项指标不在正常范围内的人。
输入格式:
输入在第一行给出一个正整数N(≤)。随后N行,每行给出一个人的名字(仅由英文字母组成的、长度不超过3个字符的串)、其呼吸频率和脉搏(均为不超过100的正整数)。
输出格式:
按照输入顺序检查每个人,如果其至少一项指标不在正常范围内,则输出其名字,每个名字占一行。
输入样例:
4
Amy 15 70
Tom 14 60
Joe 18 50
Zoe 21 71
输出样例:
Tom Zoe
#include <iostream> using namespace std; int main() { int N, hu, mai; char name[100]; scanf("%d", &N); while(N--) { scanf("%s%d%d", name, &hu, &mai); if(hu < 15 || hu > 20 || mai < 50 || mai > 70) printf("%s\n", name); } return 0; }
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
输入格式:
输入第一行给出一个正整数N
(≤ 20)。随后N
行,每行给出两个整数,分别是一个人的身高H
(120 < H < 200;单位:厘米)和真实体重W
(50 < W ≤ 300;单位:市斤),其间以空格分隔。
输出格式:
为每个人输出一行结论:如果是完美身材,输出You are wan mei!
;如果太胖了,输出You are tai pang le!
;否则输出You are tai shou le!
。
输入样例:
3
169 136
150 81
178 155
输出样例:
You are wan mei! You are tai shou le! You are tai pang le!
#include <iostream> #include <cmath> using namespace std; int main() { int N, height, weight; scanf("%d", &N); while(N--) { scanf("%d%d", &height, &weight); double biao = (height - 100.0) * 1.8; if(fabs(biao - weight) < (0.1 * biao)) printf("You are wan mei!\n"); else if(biao < weight) printf("You are tai pang le!\n"); else printf("You are tai shou le!\n"); } return 0; }
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336
是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3,约为81.82%。本题就请你计算一个给定整数到底有多二。
输入格式:
输入第一行给出一个不超过50位的整数N
。
输出格式:
在一行中输出N
犯二的程度,保留小数点后两位。
输入样例:
-13142223336
输出样例:
81.82%
鸣谢安阳师范学院段晓云老师和软件工程五班李富龙同学补充测试数据!
#include <iostream> using namespace std; int main() { string str; cin >> str; double fac = 1; if(str[0] == '-') { fac *= 1.5; str.erase(str.begin()); } if((str[str.length() - 1] - '0') % 2 == 0) fac *= 2; int cnt = 0; for(int i = 0; i < str.length(); i++) if(str[i] == '2') cnt++; printf("%.2f%%", cnt * 100.0 * fac / str.length()); return 0; }
以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y
年,直到x
岁才遇到n
个数字都不相同的年份”这句话。
输入格式:
输入在一行中给出出生年份y
和目标年份中不同数字的个数n
,其中y
在[1, 3000]之间,n
可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。
输出格式:
根据输入,输出x
和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓“n
个数字都不相同”是指不同的数字正好是n
个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。
输入样例1:
1988 4
输出样例1:
25 2013
输入样例2:
1 2
输出样例2:
0 0001
#include <iostream> using namespace std; int main() { int year, diff, cnt = 0; cin >> year >> diff; while(true) { int tmp[10] = {0}, cal = 0; tmp[year % 10]++; tmp[year / 10 % 10]++; tmp[year / 100 % 10]++; tmp[year / 1000]++; for(int i = 0; i < 10; i++) if(tmp[i]) cal++; if(cal == diff) { printf("%d %04d", cnt, year); break; } cnt++; year++; } return 0; }
C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛。既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽:
- 0、冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……)。
- 1、排名为素数的学生将赢得最好的奖品 —— 小黄人玩偶!
- 2、其他人将得到巧克力。
给定比赛的最终排名以及一系列参赛者的 ID,你要给出这些参赛者应该获得的奖品。
输入格式:
输入第一行给出一个正整数 N(≤),是参赛者人数。随后 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?
#include <iostream> #include <vector> #include <map> using namespace std; bool is_prime(int N) { if(N == 2 || N == 3) return true; for(int i = 2; i * i <= N; i++) if(N % i == 0) return false; return true; } map<int, int> m; int main() { int N, K, tmp; cin >> N; vector<int> v(N + 1); for(int i = 1; i <= N; i++) cin >> v[i]; cin >> K; while(K--) { cin >> tmp; int i = 1; while(i <= N && v[i] != tmp) i++; if(i == N + 1) printf("%04d: Are you kidding?\n", tmp); else { if(m[tmp]) { printf("%04d: Checked\n", tmp); } else { m[tmp] = 1; if(i == 1) printf("%04d: Mystery Award\n", tmp); else if(is_prime(i)) printf("%04d: Minion\n", tmp); else printf("%04d: Chocolate\n", tmp); } } } return 0; }
给定单词列表,列出常用单词及该词在字典中的页码。给定任一单词,请输出它对应的页码。
输入格式:
输入的第一行给出列表中单词的总个数 N( 0 )。下面 N 行,每行列出一个单词以及对应的页码。随后在一行中给出待查的单词总数 M( 0 ),下面 M 行,每行列出一个待查的单词。每个单词是长度不超过 10 的、由小写英文字母组成的字符串。
输出格式:
对每一个待查单词,输出它所在的页码。每个单词的输出占一行。如果该单词不在列表中,则输出 Not Found
。
输入样例:
20
principal 904
approve 59
brush 150
chain 189
converge 253
convey 254
explain 398
fall 407
luck 681
rock 998
super 1163
able 3
pity 865
abroad 5
victor 1291
zero 1350
cut 285
door 340
advise 20
fake 407
3
victor
cut
you
输出样例:
1291 285 Not Found
#include <iostream> #include <map> using namespace std; int main() { int N, tmp_i, M; cin >> N; string tmp; map<string, int> m; while(N--) { cin >> tmp >> tmp_i; m[tmp] = tmp_i; } cin >> M; while(M--) { cin >> tmp; if(m[tmp] != 0) cout << m[tmp] << endl; else cout << "Not Found" << endl; } return 0; }