PTA乙级题
PTA乙级题的某些答案及知识点总结
嗨I,你Y
这个作者很懒,什么都没留下…
展开
-
1074 宇宙无敌加法器 (20分)
#include<iostream>#include<string> using namespace std;void zhuan(string s, int a[20]){ int t = 0; for (int i = s.length() - 1; i >= 0; i--) { a[t] = s[i] - 48; t++; }}int main(){ string s, s1, s2; int a[21] = { 0 }, b[21]..原创 2020-06-17 18:23:13 · 167 阅读 · 0 评论 -
1079 延迟的回文数 (20分)
思路:这道题,我用了两个函数,第一个函数判断是否是回文数,第二个函数里面将传入的s进行反转(注意,PTA上的编译器不支持C中的反转函数strver()),再进行相加,再进行输出,最后返回相加后的结果,然后利用strcpy()函数,将相加后的结果重新赋值给s#include<stdio.h>#include<stdlib.h>#include<string.h>int ishuiwen(char s[]){ int len = strlen(s)-1; ...原创 2020-06-17 18:18:59 · 173 阅读 · 0 评论 -
1060 爱丁顿数 (25分)
英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数” E ,即满足有 E 天骑车超过 E 英里的最大整数 E。据说爱丁顿自己的 E 等于87。现给定某人 N 天的骑车距离,请你算出对应的爱丁顿数 E(≤N)。输入格式:输入第一行给出一个正整数 N (≤105),即连续骑车的天数;第二行给出 N 个非负整数,代表每天的骑车距离。输出格式:在一行中给出 N 天的爱丁顿数。输入样例:106 7 6 9 3 10 8 2 7 8输出样例:6这道题注意,测试原创 2020-06-15 21:22:32 · 246 阅读 · 0 评论 -
1055 集体照 (25分)
拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下:每排人数为 N/K(向下取整),多出来的人全部站在最后一排;后排所有人的个子都不比前排任何人矮;每排中最高者站中间(中间位置为 m/2+1,其中 m 为该排人数,除法向下取整);每排其他人以中间人为轴,按身高非增序,先右后左交替入队站在中间人的两侧(例如5人身高为190、188、186、175、170,则队形为175、188、190、186、170。这里假设你面对拍照者,所以你的左边是中间人的右边);若多人身高相同,则按名原创 2020-06-14 21:21:00 · 139 阅读 · 0 评论 -
1059 C语言竞赛 (20分)
C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛。既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽:0、冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……)。1、排名为素数的学生将赢得最好的奖品 —— 小黄人玩偶!2、其他人将得到巧克力。给定比赛的最终排名以及一系列参赛者的 ID,你要给出这些参赛者应该获得的奖品。输入格式:输入第一行给出一个正整数 N(≤104),是参赛者人数。随后 N 行给出最终排名,每行按排名顺序给出一位参赛者的 ID(4 位数字组成)。接下来给出一个原创 2020-06-14 21:13:19 · 172 阅读 · 0 评论 -
1050 螺旋矩阵 (25分)
本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。输入格式:输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 104,相邻数字以空格分隔。输出格式:输出螺旋矩阵。每行 n 个数字,共 m 行。相邻数字以 1 个空格分隔,行末不得有多余空格。输入样例:1237原创 2020-06-13 19:39:50 · 178 阅读 · 0 评论 -
1039 到底买不买 (20分)
小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。输入格式:每个输入包含 1 个测试用例。每个测试用例分别在 2 行中先后给出摊主的珠串和小红想做的珠串,两串都不超过 1000 个珠子。输出格式:如果可以买,则在一行中输出 Yes 以及有多原创 2020-06-10 20:34:32 · 158 阅读 · 0 评论 -
1046 划拳 (15分)
划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。下面给出甲、乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒。输入格式:输入第一行先给出一个正整数 N(≤100),随后 N 行,每行给出一轮划拳的记录,格式为:甲喊 甲划 乙喊 乙划其中喊是喊出的数字,划是划出的数字,均为不超过 100 的正整数(两只手一起划)。原创 2020-06-04 20:41:22 · 391 阅读 · 0 评论 -
1047 编程团体赛 (20分)
编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。现给定所有队员的比赛成绩,请你编写程序找出冠军队。输入格式:输入第一行给出一个正整数 N(≤104),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号-队员编号 成绩,其中队伍编号为 1 到 1000 的正整数,队员编号为 1 到 10 的正整数,成绩为 0 到 100 的整数。输出格式:在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保原创 2020-06-04 20:40:28 · 175 阅读 · 0 评论 -
1043 输出PATest (20分)
给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest… 这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。输入格式:输入在一行中给出一个长度不超过 104 的、仅由英文字母构成的非空字符串。输出格式:在一行中按题目要求输出排序后的字符串。题目保证输出非空。输入样例:redlesPayBestPATTopTeePHPerea原创 2020-06-02 14:16:15 · 171 阅读 · 0 评论 -
1032 挖掘机技术哪家强 (20分)
为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。输入格式:输入在第 1 行给出不超过 105 的正整数 N,即参赛人数。随后 N 行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从 1 开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。输出格式:在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。输入样例:63 652 801 1002 703 403 0原创 2020-06-01 12:41:16 · 229 阅读 · 0 评论 -
1031 查验身份证 (15分)
输入样例1:432012419880824005612010X19890101123411010819671130186637070419881216001X输出样例1:12010X19890101123411010819671130186637070419881216001X输入样例2:2320124198808240056110108196711301862输出样例2:All passed代码如下: #include<iostream>#include&.原创 2020-06-01 12:36:22 · 218 阅读 · 0 评论 -
1029 旧键盘 (20分)
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。输入格式:输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _(代表空格)组成。题目保证 2 个字符串均非空。输出格式:按照发现顺序,在一行中输...原创 2020-05-03 11:20:30 · 396 阅读 · 0 评论 -
1028 人口普查 (20分)
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。输入格式:输入在第一行给出正整数 N,取值在(0,105 ];随后 N 行,每行给出 1 个人的...原创 2020-04-27 18:19:28 · 399 阅读 · 0 评论 -
7-22 龟兔赛跑 (20分)
/思路:当时间为10的倍数的时候看看兔子的路程有没有乌龟的长,若比乌龟长,则兔子开始休息三十分钟,其中有一个测试点就是注意兔子在休息中时间t到了。/代码如下:#include<stdio.h>int main(){ int t,tu=0,gui=0,flag=0,cot=0; scanf("%d",&tu); for(int i=0;i<=t;i++) ...原创 2020-02-28 10:30:16 · 1321 阅读 · 2 评论 -
1027 打印沙漏 (20分)
用两个循环去输出,以最中间为分界点代码如下:#include<stdio.h>int main(){ int n, i,sum=0,k,j; char c; scanf("%d %c", &n,&c); for (i = 1; i < n; i = i + 2) { sum += i; if ((2 * sum - 1) > n...原创 2020-04-09 16:14:17 · 163 阅读 · 0 评论 -
1026 程序运行时间 (15分)
就是简单的将一个十进制的数字转为为时钟的形式代码如下:#include<stdio.h>int main(){ double a, b; scanf("%lf %lf" , &a, &b); double s1 = (b - a) / 100; int sum = s1, h, m, s;; if (s1 - sum >= 0.5) sum ...原创 2020-04-09 15:32:56 · 170 阅读 · 0 评论 -
1025 反转链表 (25分)
思路:因为要进行反转,所以用C++中的reverse()函数简单点,用数组进行存储代码如下:#include<iostream>#include<algorithm>using namespace std;int main(){ int data[100005], next[100005],list[100005]; int first, tmp, n,...原创 2020-04-09 09:48:23 · 160 阅读 · 0 评论 -
1024 科学计数法 (20分)
思路:由于数字过大,所以用数组存储,在全局变量里面声明,分情况讨论,确定小数点是往前移动还是往后移动,同时在像前或者后移动时又分为两种情况,即需不需要补0代码如下:#include<stdio.h>#include<string.h>#include<math.h>char s1[99999], s2[99999],c[99999];int ma...原创 2020-04-08 16:24:18 · 220 阅读 · 1 评论 -
1023 组个最小数 (20分)
给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。现给定数字,请编写程序输出能够组成的最小的数。输入格式:输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。...原创 2020-04-08 10:29:13 · 169 阅读 · 0 评论 -
1022 D进制的A+B (20分)
转换进制的方法:求余的倒序,例如14转换成3进制,14对3求余的2,14除以3得4;然后4对3求余得1,4除以3得1;再然后1对3求余的1,1除以3得0;最后14转换为3进制就是112;代码如下:#include<stdio.h>int main(){ int a, b, d,sum=0,m[10000],k=0; scanf("%d %d %d", &a, &...原创 2020-04-08 09:58:27 · 145 阅读 · 0 评论 -
1021 个位数统计 (15分)
用字符串输入,每个数字存储在数组中,最后遍历数组,当里面的个数不为0时输出#include<stdio.h>#include<string.h>int main(){ char s[1001] , a[11] = { 0 }; scanf("%s", s); for (int i = 0; i < strlen(s); i++) a[s[i] -...原创 2020-04-08 09:27:42 · 161 阅读 · 0 评论 -
1020 月饼 (25分)
这道题感觉和德才论的那个有点像,不过比那道题简单,用结构体代表月饼,对结构体中的单价进行比较,用qsort()函数进行比较。代码如下:#include<stdio.h>#include<stdlib.h>typedef struct{ double k, sum, price;}Yue;int cmp(const void *a, const void ...原创 2020-04-08 09:15:32 · 125 阅读 · 0 评论 -
1019 数字黑洞 (20分)
因为有可能只输出一次,所以用do while循环,用整数输入,转换为字符数组进行排序,再转换为整数进行相减,atoi()函数是将字符数组转换为整数,qsort()函数进行升序和降序的排序,测试点2,3,4是输入的不足四位,这样要用0补,注意,结尾要加上’\0’这个结束符,系统并没有自动补!!!这一点一定要注意!!!代码如下:#include<stdio.h>#include&...原创 2020-04-07 11:12:12 · 231 阅读 · 0 评论 -
1018 锤子剪刀布 (20分)
用数组存储甲和乙获胜的次数,那么平的次数就是总次数减去甲和乙赢的次数,为什么用数组存储?因为这样方便求得甲和乙出‘C,J, B’的哪一个时获胜最多代码如下:#include<stdio.h>int main(){ int n, i, js[4] = { 0 }, ys[4] = { 0 }; char a[4] = { 'J','C','B' }; scanf("%...原创 2020-04-05 08:59:01 · 141 阅读 · 0 评论 -
1017 A除以B (20分)
很明显需要用字符数组来存储A和B代码如下:#include<stdio.h>#include<string.h>char A[1100], Q[1100];int main(){ int B, i, j=0, k=0,R,flag=1; scanf("%s %d", &A, &B); int len1 = strlen(A); for ...原创 2020-04-04 14:06:50 · 166 阅读 · 0 评论 -
1016 部分A+B (15分)
代码如下:#include<stdio.h>#include<math.h>int main(){ int a, b, da, db,pa=0,pb=0,k1=0,k2=0; scanf("%d %d %d %d", &a, &da, &b, &db); while (a != 0) { if (a % 10 == d...原创 2020-04-03 09:48:28 · 323 阅读 · 0 评论 -
1015 德才论 (25分)(C/C++实现)
宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”现给出一批考生的德才分数,请根据司马光的理论给出录取排名。输入格式:输入第一行给出 3 个正整数,分别为:N(≤105 ),即考生总数;L(≥60),为录取最低分数线,即德分和才分均不低于 L...原创 2020-04-02 12:07:20 · 536 阅读 · 0 评论 -
1014 福尔摩斯的约会 (20分)
大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2 对相同的字符是 E ,那是第 5 个英文字母,代...原创 2020-04-01 10:08:19 · 148 阅读 · 0 评论 -
1013 数素数 (20分)
/思路:直接设一个计数器,当当前遍历的素数的个数等于m的时候停止遍历/代码如下:#include<stdio.h>#include<math.h>int isprime(int a){ if (a == 1) return 0; else if (a == 2) return 1; else { for (int i = 2; i <= sq...原创 2020-03-16 14:15:04 · 229 阅读 · 0 评论 -
1012 数字分类 (20分)
#include<stdio.h>int main(){ int a1=0, a2=0, a3=0, i=0, n, m,flag=1,cot=0,max=-1,f2=0; double a4=0; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &m); int k = m...原创 2020-03-16 13:53:32 · 179 阅读 · 0 评论 -
1011 A+B 和 C (15分)
#include<stdio.h>int main(){ int n, i; double a, b, c; scanf("%d", &n); for (i = 1; i <= n; i++) { scanf("%lf %lf %lf", &a, &b, &c); if (a + b > c) printf("...原创 2020-03-16 13:26:36 · 148 阅读 · 0 评论 -
1010 一元多项式求导 (25分)
设计函数求一元多项式的导数。(注:xn (n为整数)的一阶导数为nxn−1 。)输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。输入样例:3 4 -...原创 2020-03-15 10:33:53 · 260 阅读 · 0 评论 -
1009 说反话 (20分)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。输出格式:每个测试用例的输出占一行,输出倒序后的句子。输入样例:Hello World Here I Com...原创 2020-03-15 09:12:43 · 260 阅读 · 0 评论 -
1008 数组元素循环右移问题 (20分)
输入样例:6 21 2 3 4 5 6输出样例:5 6 1 2 3 4/思路:用一个数组就行了,边输入边存储,当i<n-k时存入a[i+k],否则就存入a[i-(n-k)]/代码如下:#include<stdio.h>int main(){ int n, k, i, j, a[101], b[101]; scanf("%d %d", &n, &am...原创 2020-03-14 20:27:14 · 242 阅读 · 0 评论 -
1007 素数对猜想 (20分)
让我们定义dn 为:dn =pn+1 −pn ,其中pi 是第i个素数。显然有d1 =1,且对于n>1有dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N(<105 ),请计算不超过N的满足猜想的素数对的个数。输入格式:输入在一行给出正整数N。输出格式:在一行中...原创 2020-03-14 20:09:43 · 176 阅读 · 0 评论 -
1006 换个格式输出整数 (15分)
让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12…n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234,因为它有 2 个“百”、3 个“十”、以及个位的 4。输入格式:每个测试输入包含 1 个测试用例,给出正整数 n(<1000)。输出格式:每个测试用例的输出占一行,用规定的格式输出 ...原创 2020-03-14 19:45:49 · 154 阅读 · 0 评论 -
1005 继续(3n+1)猜想 (25分)
卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 5、8、...原创 2020-03-14 19:24:14 · 161 阅读 · 0 评论 -
1004 成绩排名 (20分)
读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。输入格式:每个测试输入包含 1 个测试用例,格式为第 1 行:正整数 n第 2 行:第 1 个学生的姓名 学号 成绩第 3 行:第 2 个学生的姓名 学号 成绩… … …第 n+1 行:第 n 个学生的姓名 学号 成绩其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之...原创 2020-03-14 17:41:00 · 114 阅读 · 0 评论 -
1003 我要通过! (20分)
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;如果 aPbTc...原创 2020-03-14 17:27:35 · 126 阅读 · 0 评论