![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
PAT乙级-C语言
文章平均质量分 59
以C为编程语言,记录PAT乙级刷题过程。
莓莓不加糖
这个作者很懒,什么都没留下…
展开
-
PAT乙级1005:继续(3n+1)猜想(25)
题目 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 5、8、4、2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关键数”,如果 n 不能被数列中的其他数字原创 2021-12-15 09:47:52 · 123 阅读 · 0 评论 -
PAT乙级1010:一元多项式求导 (25)
题目 设计函数求一元多项式的导数。 ( 注:x n(n为整数)的一阶导数为nxn−1) 输入格式 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。 输出格式 以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。 输入样例 3 4 -5 2 6 1 -2 0 结尾无空行 输出样例 12 3 -10 1 6 0 解题思路 本题思路总体较简单,先读入给定的多项式,原创 2021-11-29 15:28:55 · 315 阅读 · 0 评论 -
PAT乙级1017:A除以B(20)
题目 本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。 输入格式: 输入在一行中依次给出 A 和 B,中间以 1 空格分隔。 输出格式: 在一行中依次输出 Q 和 R,中间以 1 空格分隔。 输入样例: 123456789050987654321 7 结尾无空行 输出样例: 17636684150141093474 3 结尾无空行 解题思路 读入A和B; 分类计算,如果是两个一位数相除,则直接输出,不涉及原创 2021-12-15 10:14:11 · 617 阅读 · 0 评论 -
PAT乙级1019:数字黑洞(20)
题目 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 … … 现给定任原创 2021-12-15 10:49:55 · 101 阅读 · 0 评论 -
PAT乙级1020:月饼(25)
题目 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。 注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。 输原创 2021-12-15 13:42:24 · 116 阅读 · 0 评论 -
PAT乙级1024:科学计数法(20)
题目 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。 现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。 输入格式: 每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。 输出格式: 对每个原创 2021-12-16 12:24:52 · 137 阅读 · 0 评论 -
PAT乙级1025:反转链表 (25)
题目 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转。例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为3→2→1→6→5→ 4;如果 K 为 4,则输出应该为 4→3→2→1→5→6,即最后不到 K 个元素不反转。 输入格式: 每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数 N (≤105)、以及正整数 K (≤N),即要求反转的子链结点的个数。结点的地址是 5 位非负整数,NULL 地址用 −1 表示。 接下原创 2021-12-10 14:38:55 · 269 阅读 · 0 评论 -
PAT乙级1030:完美数列 (25)
解题思路 读入数据后对输入数据进行快速排序(我采用的是升序); 从后向前遍历,不断将遍历到的当前元素假设为最大值(外层循环),再以当前元素为下标上限,向前遍历(内层循环),找到第一个不满足题意的元素计算当前的“完美数列”长度,存入max; 遍历结束,输出max。 难点 测试点5运行超时。 解决过程 将解题思路中所述的内层循环的起始点进行修改,具体来说: 由于只需要找到最长的完美数列,因此,内层循环的每一次遍历的时候都可以从当前元素(外层循环假设为最大值的元素,假设下标为i)向前数(max-1)个元素开.原创 2021-11-16 20:27:57 · 310 阅读 · 0 评论 -
PAT乙级1033:旧键盘打字 (20)
题目 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过 105个字符的串。可用的字符包括字母 [a-z, A-Z]、数字 0-9、以及下划线 _(代表空格)、,、.、-、+(代表上档键)。题目保证第 2 行输入的文字串非空。 注意:如果上档键坏掉了,那么大写的英文字母无法被打出。 输出格式: 在一行中原创 2021-12-10 13:21:18 · 126 阅读 · 0 评论 -
PAT乙级1034:有理数四则运算 (20)
题目 本题要求编写程序,计算 2 个有理数的和、差、积、商。 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。 输出格式: 分别在 4 行中按照 有理数1 运算符 有理数2 = 结果 的格式顺序输出 2 个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式 k a/b,其中 k 是整数部分,a/b 是最简分数部分;若为负数,则须加括号;若除法分母为 0,则输出 Inf。题目保证正原创 2021-12-10 16:51:32 · 292 阅读 · 0 评论 -
PAT乙级1035:插入与归并 (25)
题目 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。 归并排序进行如下迭代操作:首先将原始序列看成 N 个只包含 1 个元素的有序子序列,然后每次迭代归并两个相邻的有序子序列,直到最后只剩下 1 个有序的序列。 现给定原始序列和由某排序算法产生的中间序列,请你判断该算法究竟是哪种排序算法? 输入格式: 输入在第一行给出正整数 N (≤100);随后一行给出原始序列的 N 个整原创 2021-12-10 18:38:49 · 468 阅读 · 0 评论 -
PAT乙级1040:有几个PAT (25)
题目 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位§,第 4 位(A),第 6 位(T)。 现给定字符串,问一共可以形成多少个 PAT? 输入格式: 输入只有一行,包含一个字符串,长度不超过105,只包含 P、A、T 三种字母。 输出格式: 在一行中输出给定字符串中包含多少个 PAT。由于结果可能比较大,只输出对 1000000007 取余数的结果。 输入样例: APPAPT 结尾无空行 输出样例: 2原创 2021-12-10 19:21:10 · 559 阅读 · 0 评论 -
PAT乙级1044:火星数字 (20)
题目 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret。 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。 火星人将进位以后的 12 个高位数字分别称为:tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou。 例如地球人的数字 29 翻译成火星文就是 hel mar;而火星文 elo nov 对应地球数字 115。原创 2021-12-10 21:10:30 · 207 阅读 · 0 评论 -
PAT乙级1049:数列的片段和 (20)
题目 给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列 { 0.1, 0.2, 0.3, 0.4 },我们有 (0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 这 10 个片段。 给定正整数数列,求出全部片段包含的所有的数之和。如本例中 10 个片段总和是 0.1 + 0.3 + 0.6 + 1.0 + 0.2原创 2021-12-10 22:32:46 · 61 阅读 · 0 评论 -
PAT乙级1050:螺旋矩阵 (25)
题目 本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。 输入格式: 输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 10 4,相邻数字以空格分隔。 输出格式: 输出螺旋矩阵。每行 n 个数字,共 m 行。相邻数字以 1 个空格分隔,行末不得有多余空格。 输入样例: 12 3原创 2021-12-11 11:55:08 · 680 阅读 · 0 评论 -
PAT乙级1051:复数乘法 (15)
题目 复数可以写成 (A+Bi) 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 i 2=−1;也可以写成极坐标下的指数形式 (R×e (Pi)),其中 R 是复数模,P 是辐角,i 是虚数单位,其等价于三角形式 R(cos( P )+isin( P ))。 现给定两个复数的 R 和 P,要求输出两数乘积的常规形式。 输入格式: 输入在一行中依次给出两个复数的 R1 , P1, R2, P2,数字间以空格分隔。 输出格式: 在一行中按照 A+Bi 的格式输出两数乘积的常规形式,实部和虚部均保原创 2021-12-10 22:58:06 · 599 阅读 · 0 评论 -
PAT乙级1055:集体照 (25)
题目 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每排人数为 N/K(向下取整),多出来的人全部站在最后一排; 后排所有人的个子都不比前排任何人矮; 每排中最高者站中间(中间位置为 m/2+1,其中 m 为该排人数,除法向下取整); 每排其他人以中间人为轴,按身高非增序,先右后左交替入队站在中间人的两侧(例如5人身高为190、188、186、175、170,则队形为175、188、190、186、170。这里假设你面对拍照者,所以你的左边是中间人的右边); 若多人身高相同,原创 2021-12-11 14:04:37 · 100 阅读 · 0 评论 -
PAT乙级1060:爱丁顿数 (25)
题目 英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数” E ,即满足有 E 天骑车超过 E 英里的最大整数 E。据说爱丁顿自己的 E 等于87。 现给定某人 N 天的骑车距离,请你算出对应的爱丁顿数 E(≤N)。 输入格式: 输入第一行给出一个正整数 N (≤105),即连续骑车的天数;第二行给出 N 个非负整数,代表每天的骑车距离。 输出格式: 在一行中给出 N 天的爱丁顿数。 输入样例: 10 6 7 6 9 3 10 8 2 7 8 结尾无空行 输出样例: 6 结原创 2021-12-11 13:25:17 · 155 阅读 · 0 评论 -
PAT乙级1062:最简分数 (20)
题目 一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。 现给定两个不相等的正分数 N1 /M1 和 N2 /M2 ,要求你按从小到大的顺序列出它们之间分母为 K 的最简分数。 输入格式: 输入在一行中按 N/M 的格式给出两个正分数,随后是一个正整数分母 K,其间以空格分隔。题目保证给出的所有整数都不超过 1000。 输出格式: 在一行中按 N/M 的格式列出两个给定分数之间分母为 K 的所有最简分数,按从小到大的顺序,其间以 1 个空格分隔。行原创 2021-12-11 14:47:42 · 214 阅读 · 0 评论 -
PAT乙级1067:试密码 (20)
题目 当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死。本题就请你实现这个小功能。 输入格式: 输入在第一行给出一个密码(长度不超过 20 的、不包含空格、Tab、回车的非空字符串)和一个正整数 N(≤ 10),分别是正确的密码和系统允许尝试的次数。随后每行给出一个以回车结束的非空字符串,是用户尝试输入的密码。输入保证至少有一次尝试。当读到一行只有单个 # 字符时,输入结束,并且这一行不是用户的输入。 输出格式: 对用户的每个输入,如果是正确的密码且尝试次数原创 2021-12-11 15:32:22 · 78 阅读 · 0 评论 -
PAT乙级1068:万绿丛中一点红 (20)
题目 对于计算机而言,颜色不过是像素点对应的一个 24 位的数值。现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围 8 个相邻像素的颜色差充分大。 输入格式: 输入第一行给出三个正整数,分别是 M 和 N(≤ 1000),即图像的分辨率;以及 TOL,是所求像素点与相邻点的颜色差阈值,色差超过 TOL 的点才被考虑。随后 N 行,每行给出 M 个像素的颜色值,范围在 [0,224) 内。所有同行数字间用空格或 TAB 分开。 输出格式: 在一原创 2021-12-11 16:11:44 · 53 阅读 · 0 评论 -
PAT乙级1073:多选题常见计分法(20)
题目 批改多选题是比较麻烦的事情,有很多不同的计分方法。有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数;如果考生选择了任何一个错误的选项,则不能得分。本题就请你写个程序帮助老师批改多选题,并且指出哪道题的哪个选项错的人最多。 输入格式: 输入在第一行给出两个正整数 N(≤1000)和 M(≤100),分别是学生人数和多选题的个数。随后 M 行,每行顺次给出一道题的满分值(不超过 5 的正整数)、选项个数(不少于 2 且不超过 5 的正整数)、正确选项个数原创 2021-12-11 17:16:27 · 675 阅读 · 0 评论 -
PAT乙级1074:宇宙无敌加法器(20)
题目 地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个 PAT 星人都必须熟记各位数字的进制表,例如“……0527”就表示最低位是 7 进制数、第 2 位是 2 进制数、第 3 位是 5 进制数、第 4 位是 10 进制数,等等。每一位的进制 d 或者是 0(表示十进制)、或者是 [2,9] 区间内的整数。理论上这个进制表应该包含无穷多位数字,但从实际应用出发,PAT 星人通常只需要记住前 20原创 2021-12-11 18:13:33 · 92 阅读 · 0 评论 -
PAT乙级1075:链表元素分类(25)
题目 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面。但每一类内部元素的顺序是不能改变的。例如:给定链表为18→7→-4→0→5→-6→10→11→-2,K 为 10,则输出应该为 -4→-6→-2→7→0→5→10→18→11。 输入格式: 每个输入包含一个测试用例。每个测试用例第 1 行给出:第 1 个结点的地址;结点总个数,即正整数N (≤105);以及正整数K (≤103)。结点的地址是 5 位非负整原创 2021-12-13 09:45:57 · 139 阅读 · 0 评论 -
PAT乙级1080:MOOC期终成绩(25)
题目 对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分(满分100)。总评成绩的计算公式为 G=(Gmid−term × 40%+Gfinal × 60%),如果 Gmid−term > Gfinal;否则总评 G 就是 Gfinal。这里 Gmid−term 和 Gfinal 分别为学生的期中和期末成绩。 现在的问题是,每次考试都产生一张独立的成绩单原创 2021-12-13 10:47:06 · 310 阅读 · 0 评论 -
PAT乙级1085:PAT单位排行 (25)
坑点 测试点5:在使用qsort对每一个学校的加权总分排序cmp函数的时候,此时的加权总分便应当是double、float的整数部分。具体体现在return中,应当return整数化后的两个加权总分之差,而不是double类型的两个加权总分的差值。(具体修改的语句见以下代码片第7行) int cmp2(const void *a,const void *b){//学校首先按加权总分>人数升序输出>单位码的字典序输出。 struct school c = *(struct school*)原创 2021-11-16 11:02:11 · 396 阅读 · 0 评论 -
PAT乙级1095:解码PAT准考证(25)
题目 PAT 准考证号由 4 部分组成: 第 1 位是级别,即 T 代表顶级;A 代表甲级;B 代表乙级; 第 2~4 位是考场编号,范围从 101 到 999; 第 5~10 位是考试日期,格式为年、月、日顺次各占 2 位; 最后 11~13 位是考生编号,范围从 000 到 999。 现给定一系列考生的准考证号和他们的成绩,请你按照要求输出各种统计信息。 输入格式: 输入首先在一行中给出两个正整数 N(≤104)和 M(≤100),分别为考生人数和统计要求的个数。 接下来 N 行,每行给出一个考生的准考原创 2021-12-13 15:25:55 · 61 阅读 · 0 评论