PAT
个人对PAT类题目的一些AC代码和思路。
重剑DS
学的越多,越觉无知
展开
-
1055 集体照 (25分)---PAT (Basic Level) Practice (中文)
题目详情拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每排人数为 N/K(向下取整),多出来的人全部站在最后一排; 后排所有人的个子都不比前排任何人矮; 每排中最高者站中间(中间位置为 m/2+1,其中 m 为该排人数,除法向下取整); 每排其他人以中间人为轴,按身高非增序,先右后左交替入队站在中间人的两侧(例如5人身高为190、188、186、175、170,则队形为175、188、190、186、170。这里假设你面对拍照者,所以你原创 2020-07-25 22:07:40 · 100 阅读 · 0 评论 -
1062 最简分数 (20分) - PAT (Basic Level) Practice (中文)
题目详情一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0。最简分数是指分子和分母没有公约数的分数表示形式。现给定两个不相等的正分数 N1/M1 和 N2/M2,要求你按从小到大的顺序列出它们之间分母为 K 的最简分数。输入格式:输入在一行中按 N/M 的格式给出两个正分数,随后是一个正整数分母 K,其间以空格分隔。题目保证给出的所有整数都不超过 1000。输出格式:在一行中按 N/M 的格式列出两个给定分数之间分母为 K 的所有最简分数,按从小到大原创 2020-07-18 21:59:50 · 877 阅读 · 0 评论 -
1061 判断题 (15分) - PAT (Basic Level) Practice (中文)
判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。输入格式:输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数和判断题数量。第二行给出 M 个不超过 5 的正整数,是每道题的满分值。第三行给出每道题对应的正确答案,0 代表“非”,1 代表“是”。随后 N 行,每行给出一个学生的解答。数字间均以空格分隔。输出格式:按照输入的顺序输出每个学生的得分,每个分数占一行。输入样例:3 62 1 3 3 4 50 0 1 0 1 1原创 2020-07-18 20:52:34 · 181 阅读 · 0 评论 -
1060 爱丁顿数 (25分) - PAT (Basic Level) Practice (中文)
英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数”E,即满足有E天骑车超过E英里的最大整数E。据说爱丁顿自己的E等于87。现给定某人N天的骑车距离,请你算出对应的爱丁顿数E(≤N)。输入格式:输入第一行给出一个正整数N(≤105),即连续骑车的天数;第二行给出N个非负整数,代表每天的骑车距离。输出格式:在一行中给出N天的爱丁顿数。输入样例:106 7 6 9 3 10 8 2 7 8输出样例:...原创 2020-07-17 20:50:53 · 116 阅读 · 0 评论 -
1059 C语言竞赛 (20分) - PAT (Basic Level) Practice (中文)
C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛。既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽:0、冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……)。 1、排名为素数的学生将赢得最好的奖品 —— 小黄人玩偶! 2、其他人将得到巧克力。给定比赛的最终排名以及一系列参赛者的 ID,你要给出这些参赛者应该获得的奖品。输入格式:输入第一行给出一个正整数N(≤104),是参赛者人数。随后N行给出最终排名,每行按排名顺序给出一位参赛者的 ID(4 位数字组成)。接下...原创 2020-07-17 20:08:24 · 148 阅读 · 0 评论 -
1058 选择题 (20分) - PAT (Basic Level) Practice (中文)
批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多。输入格式:输入在第一行给出两个正整数 N(≤ 1000)和 M(≤ 100),分别是学生人数和多选题的个数。随后 M 行,每行顺次给出一道题的满分值(不超过 5 的正整数)、选项个数(不少于 2 且不超过 5 的正整数)、正确选项个数(不超过选项个数的正整数)、所有正确选项。注意每题的选项从小写英文字母 a 开始顺次排列。各项间以 1 个空格分隔。最后 N 行,每行给出一个学生的答题情况,其每题答案格式为 (原创 2020-07-16 21:17:45 · 110 阅读 · 0 评论 -
1057 数零壹 (20分) - PAT (Basic Level) Practice (中文)
给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有多少 0、多少 1。例如给定字符串 PAT (Basic),其字母序号之和为:16+1+20+2+1+19+9+3=71,而 71 的二进制是 1000111,即有 3 个 0、4 个 1。输入格式:输入在一行中给出长度不超过 105、以回车结束的字符串。输出格式:在一行中先后输出 0 的个数和 1 的个数原创 2020-07-15 21:25:53 · 136 阅读 · 0 评论 -
1054 求平均值 (20分) - PAT (Basic Level) Practice (中文)包含 sscanf函数 和 sprintf函数 的介绍
题目详情本题的基本要求非常简单:给定 N 个实数,计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是 [−1000,1000] 区间内的实数,并且最多精确到小数点后 2 位。当你计算平均值的时候,不能把那些非法的数据算在内。输入格式:输入第一行给出正整数 N(≤100)。随后一行给出 N 个实数,数字间以一个空格分隔。输出格式:对每个非法输入,在一行中输出 ERROR: X is not a legal number,其中 X 是输入。最后在一行中输出结果:The原创 2020-07-10 19:37:56 · 174 阅读 · 0 评论 -
1052 卖个萌 (20分) - PAT (Basic Level) Practice (中文)
题目详情萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见,我们假设一个表情符号是按下列格式输出的:[左手]([左眼][口][右眼])[右手]现给出可选用的符号集合,请你按用户的要求输出表情。输入格式:输入首先在前三行顺序对应给出手、眼、口的可选符号集。每个符号括在一对方括号 []内。题目保证每个集合都至少有一个符号,并不超过 10 个符号;每个符号包含 1 到 4 个非空字符。之后一行给出一个正整数 K,为用户请求的个数。随后 K 行,每行给出一个用户的符号选原创 2020-07-09 20:07:23 · 131 阅读 · 0 评论 -
1050 螺旋矩阵 (25分) - PAT (Basic Level) Practice(中文)
题目详情本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;m≥n;且 m−n 取所有可能值中的最小值。输入格式:输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 104,相邻数字以空格分隔。输出格式:输出螺旋矩阵。每行 n 个数字,共 m 行。相邻数字以 1 个空格分隔,行末不得有多余空格。原创 2020-07-08 20:28:29 · 188 阅读 · 0 评论 -
1049 数列的片段和 (20分) - PAT (Basic Level) Practice(中文)
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原创 2020-07-08 08:57:15 · 220 阅读 · 0 评论 -
1048 数字加密 (20分) - PAT (Basic Level) Practice(中文)
本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。输入格式:输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。输出格式:在一行中输出加密后的结果。输入样例:1234567原创 2020-07-07 20:22:11 · 165 阅读 · 0 评论 -
1047 编程团体赛 (20分) - PAT (Basic Level) Practice(中文)
编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。现给定所有队员的比赛成绩,请你编写程序找出冠军队。输入格式:输入第一行给出一个正整数 N(≤104),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号-队员编号 成绩,其中队伍编号为 1 到 1000 的正整数,队员编号为 1 到 10 的正整数,成绩为 0 到 100 的整数。输出格式:在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注原创 2020-07-07 16:29:24 · 217 阅读 · 0 评论 -
1045 快速排序 (25分) - PAT (Basic Level) Practice(中文)
题目详情著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。 给定划分后的 N 个互不相同的正整数的排列,请问有多少个元素可能是划分前选取的主元?例如给定 $N = 5$, 排列是1、3、2、4、5。则:1 的左边没有元素,右边的元素都比它大,所以它可能是主元; 尽管 3 的左边元素都比它小,但其右边的 2 比它小,所以它不能是主元; 尽管 2 的右边元素都比它大,但其左边的 3 比它大,所以它原创 2020-07-07 15:38:54 · 169 阅读 · 0 评论 -
PAT (Basic Level) Practice 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。原创 2020-07-04 16:10:12 · 196 阅读 · 0 评论 -
1038 统计同成绩学生(C++)
题目详情本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出。输入格式:输入在第 1 行给出不超过 105 的正整数 N,即学生总人数。随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔。最后一行给出要查询的分数个数 K(不超过 N 的正整数),随后是 K 个分数,中间以空格分隔。输出格式:在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。输入样例:1060 75 90 55 75 99 82 90 75 503原创 2020-07-01 19:26:05 · 484 阅读 · 0 评论 -
1035 插入与归并(C++)
题目详情1035 插入与归并 (25分)根据维基百科的定义:插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。归并排序进行如下迭代操作:首先将原始序列看成 N 个只包含 1 个元素的有序子序列,然后每次迭代归并两个相邻的有序子序列,直到最后只剩下 1 个有序的序列。现给定原始序列和由某排序算法产生的中间序列,请你判断该算法究竟是哪种排序算法?输入格式:输入在第一行给出正整数原创 2020-06-30 22:00:42 · 23989 阅读 · 0 评论 -
1033 旧键盘打字(C++)
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?输入格式:输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过 105 个字符的串。可用的字符包括字母 [a-z, A-Z]、数字 0-9、以及下划线 _(代表空格)、,、.、-、+(代表上档键)。题目保证第 2 行输入的文字串非空。注意:如果上档键坏掉了,那么大写的英文字母无法被打出。输出格式:原创 2020-06-04 20:51:09 · 381 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1026-1030
1026 程序运行时间 (15分)要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间。这个时间单位是 clock tick,即“时钟打点”。同时还有一个常数 CLK_TCK,给出了机器时钟每秒所走的时钟打点数。于是为了获得一个函数 f 的运行时间,我们只要在调用 f 之前先调用 clock(),获得一个时钟打点数 C1;在 f 执行完成后再调用 clock(),获得另一个时钟打点数 C原创 2020-06-04 19:30:52 · 263 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1021-1025
1021 个位数统计 (15分)给定一个 k 位整数 N=d(k−1)10^(k−1)+⋯+d10^1+d0 (0≤di≤9, i=0,⋯,k−1, d(k−1)>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。输入格式:每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。输出格式:对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该原创 2020-05-31 14:10:54 · 291 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1016-1020
1016 部分A+B (15分)正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA组成的新整数 PA。例如:给定 A=3862767,DA=6,则 A 的“6 部分”PA 是 66,因为 A 中有 2 个 6。现给定 A、DA、B、DB,请编写程序计算 PA+PB。输入格式:输入在一行中依次给出 A、DA、B、DB,中间以空格分隔,其中 0 < A,B < 10^10。输出格式:在一行中输出 PA+PB 的值。输入原创 2020-05-26 20:41:42 · 214 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1011-1015
1011 A+B 和 C (15分)给定区间 [−231,231] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。输入格式:输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。输出格式:对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。输入样例:原创 2020-05-24 19:48:28 · 217 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1006-1010
1006 换个格式输出整数 (15分)让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234,因为它有 2 个“百”、3 个“十”、以及个位的 4。输入格式:每个测试输入包含 1 个测试用例,给出正整数 n(<1000)。输出格式:每个测试用例的输出占一行,用规定的格式输出 n。输入样例 1:234输出样例 1:原创 2020-05-19 16:47:22 · 328 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1001-1005
1001 害死人不偿命的(3n+1)猜想 (15分)卡拉兹(Callatz)猜想:对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……我们今天的题目不是证明卡拉原创 2020-05-19 11:45:28 · 235 阅读 · 0 评论