
PAT乙级
利用传统的c语言和脚本语言python练习一些简单的算法,提升自己的算法能力
小强同学:
这个作者很懒,什么都没留下…
展开
-
PAT 乙级 1049 数列的片段和
给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列 { 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 个片段。的正整数 N,表示数列中数的个数,第二行给出 N 个不超过 1.0 的正数,是数列中的数,其间以一个空格分隔。现在能力不够以后在想吧。原创 2024-01-08 12:06:43 · 512 阅读 · 0 评论 -
PAT 乙级 1076 Wifi密码
解题思路:首先这题看着复杂实际很简单,每题就一个正确的我们把他找出来就可以,之后利用和’A’ 相减加一 求出数值,输出即可。python代码更容易。原创 2024-01-07 23:16:33 · 777 阅读 · 0 评论 -
PAT 乙级 1056 组合数的和
给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。输入在一行中先给出 N(1 < N < 10),随后给出 N 个不同的非 0 个位数字。输出所有可能组合出来的2位数字的和。原创 2024-01-07 22:49:14 · 475 阅读 · 0 评论 -
PAT 乙级 1057 数零壹
的字符串,本题要求你将其中所有英文字母的序号(字母 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。在一行中先后输出 0 的个数和 1 的个数,其间以空格分隔。注意:若字符串中不存在字母,则视为 N 不存在,也就没有 0 和 1。给定一串长度不超过 10。原创 2024-01-02 22:40:45 · 383 阅读 · 0 评论 -
PAT 乙级 1047 编程团体赛
,即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号-队员编号 成绩,其中队伍编号为 1 到 1000 的正整数,队员编号为 1 到 10 的正整数,成绩为 0 到 100 的整数。编程团体赛的规则为:每个参赛队由若干队员组成;参赛队的成绩为所有队员的成绩和;在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。解题思路:利用hash 求出编号的分数 找出最大的输出即可。现给定所有队员的比赛成绩,请你编写程序找出冠军队。原创 2024-01-01 17:32:47 · 368 阅读 · 0 评论 -
PAT 乙级 1046 划拳
划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。其中喊是喊出的数字,划是划出的数字,均为不超过 100 的正整数(两只手一起划)。下面给出甲、乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒。在一行中先后输出甲、乙两人喝酒的杯数,其间以一个空格分隔。解题思路:这就是一道简单加减的题目直接上代码。甲喊 甲划 乙喊 乙划。原创 2023-12-31 22:37:51 · 401 阅读 · 0 评论 -
PAT乙级1045 快速排序
解题思路:这题我认为时间给的比较仓促,还是要找最优解算法,题目很清晰就是快排的一次划分,那我们就按照定义来看,主元必须是左边小于它右边大于它的,那我们一次循环找到左边最大的和它比,再另一次循环找到右边最小的和它比,满足左边最大的小于等于它,同时右边最小的也大于等于它,它不就是主元嘛。著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。尽管 2 的右边元素都比它大,但其左边的 3 比它大,所以它不能是主元;原创 2024-01-01 22:40:52 · 1175 阅读 · 0 评论 -
PAT 乙级 1043 输出PATest
解题思路:对于c来说hash函数求出各个符号的数量,不为0时就输出即可,python利用字符串count函数就可以了。原创 2024-01-02 22:37:39 · 432 阅读 · 0 评论 -
PAT 乙级 1042 字符统计
输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。解题思路:C语言利用hash函数就可以解决,python利用字典的话,要注意把key值排序一下。请编写程序,找出一段给定文字中出现最频繁的那个英文字母。原创 2023-12-31 17:34:01 · 438 阅读 · 0 评论 -
PAT 乙级 1042 字符统计
输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。请编写程序,找出一段给定文字中出现最频繁的那个英文字母。解题思路:简单hash即可。作者 CHEN, Yue。原创 2023-12-24 22:30:35 · 432 阅读 · 0 评论 -
PAT 乙级 1041 考试座位号
正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。作者 CHEN, Yue。1041 考试座位号。原创 2023-12-30 20:23:56 · 444 阅读 · 0 评论 -
PAT 乙级1040 有几个PAT
不好弄,那我们换个思路乘法不就是几个数相加吗,我们以A为中介,看看他前面的P有多少个,后面T有多少个。当前A可以组成的PAT个数就求完了,再去求其他A的,A算完了题就求完了。python的和c语言都是这个思路。解题思路:粗看这题,心中有一个大致的想法,肯定是要用到排列组合的,我们认真思考一下,无非是一个位置。原创 2023-12-30 21:15:44 · 384 阅读 · 0 评论 -
PAT 乙级 1039 到底买不买
解题思路:此题用c语言的话可以直接hash去求比较简单,首先求出各个颜色的个数,一比对就可以了,python我利用了字典和集合。原创 2023-12-30 19:54:18 · 389 阅读 · 0 评论 -
PAT 乙级 1038 统计同成绩学生
的正整数 N,即学生总人数。随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔。最后一行给出要查询的分数个数 K(不超过 N 的正整数),随后是 K 个分数,中间以空格分隔。在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出。python版本:我利用列表方法count方法求解,有测试点超时。第二个版本 python类似c语言解法 但是也很危险。解题思路:c语言依旧利用hash函数求。原创 2023-12-28 16:35:15 · 500 阅读 · 0 评论 -
PAT 乙级 1037 在霍格沃茨找零钱
如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易。”现在,给定哈利应付的价钱 P 和他实付的钱 A,你的任务是写一个程序来计算他应该被找的零钱。] 区间内的整数,Sickle 是 [0, 17) 区间内的整数,Knut 是 [0, 29) 区间内的整数。解题思路:这题本质上一个进制换算的问题,我们只需要把进制换算一下,相减运算一下就好。原创 2023-12-27 15:43:57 · 376 阅读 · 0 评论 -
PAT 乙级 1033 旧键盘打字
本题利用hash存储坏键,字母都要变成大写去和hash比对,如果发现有就不输出,但是要注意一个特殊键位上档键,如果是字母大写的,上档键坏了也是不输出的,特殊判断一下即可。可用的字符包括字母 [a-z, A-Z]、数字 0-9、以及下划线 _(代表空格)、,、.、-、+(代表上档键)。旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。每段文字是不超过 10。原创 2023-12-29 16:02:01 · 999 阅读 · 0 评论 -
PAT 乙级1032 挖掘机技术哪家强
的正整数 N,即参赛人数。随后 N 行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从 1 开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。解题思路:利用hash函数求解,求出最大值,输出即可,但是一定要注意到只有一个编号的特殊情况。在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。python版本比较危险,可能偶尔提交就会超时。原创 2023-12-28 15:49:53 · 446 阅读 · 0 评论 -
PAT 乙级 1031 查验身份证
首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。原创 2023-12-25 19:37:04 · 419 阅读 · 0 评论 -
PAT 乙级 1030 完美数列
解题思路:这道题首先需要排序,然后双循环找出最大的那个,但一定要注意优化,比如我已经刚好找到临界,或者之后的不用遍历了没意义了,要赶紧跳出循环,否则会超时,另外其实这题还有个范围的坑过,因为乘法一旦用int,会溢出,只能用long long int ,不推荐用double去弄,原因跟之前的理由一样,就是存储方式不同,很容易在极特殊的测试点卡住,我的原则是能不用double就不用double,python就不用想这些了写起来更容易。注意测试点4 偶尔提交python可以通过偶尔通过不了。原创 2023-12-27 15:13:15 · 537 阅读 · 0 评论 -
PAT 乙级 1029 旧键盘
解题思路 python版:我开始想用python版本的集合,后来一看不可以用,原因就是集合是无序的,还是用了列表,我们这里要注意列表有没有,没有再加,保证列表里面只有一个相关元素,删除的时候同理,最后剩下的即保证了顺序也保证了唯一性,还有别忘了字母大写。然后再根据后面的字符去删次数,次数不为0的就是我们要的,切记我们输出之后要把数量改为0,不然就重复输出了。旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。原创 2023-12-24 22:11:05 · 397 阅读 · 0 评论 -
PAT 乙级 1028 人口普查
解题思路:此题我想到俩种方法,一种是排序方法,一种是不排序的方法,首先都是看是否是有效年龄,然后一种是排序,另一种是维护最大值和最小值的变量,一定要注意如果有效数字是0那就只输出0就可以了。c语言解法一:排序法。原创 2023-12-28 12:04:38 · 432 阅读 · 0 评论 -
pat乙级 1027 打印沙漏
所谓“沙漏形状”,是指每行输出奇数个符号;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印。给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。原创 2023-12-25 19:22:09 · 1332 阅读 · 0 评论 -
PAT 乙级1026 程序运行时间
要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间。于是为了获得一个函数 f 的运行时间,我们只要在调用 f 之前先调用 clock(),获得一个时钟打点数 C1;两次获得的时钟打点数之差 (C2-C1) 就是 f 运行所消耗的时钟打点数,再除以常数 CLK_TCK,就得到了以秒为单位的运行时间。现给定被测函数前后两次获得的时钟打点数,请你给出被测函数运行的时间。原创 2023-12-22 11:51:24 · 521 阅读 · 0 评论 -
PAT乙级 1025 反转链表
例如:给定 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 个测试用例。对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。原创 2023-12-29 15:05:19 · 707 阅读 · 0 评论 -
PAT 乙级 1024 科学计数法
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。解题思路:对于c来说我们先不考虑小数点,先把有效数字找到,指数求出来,然后根据指数是正数还是负数分别对有效数字处理,细节比较多。现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。作者 HOU, Qiming。原创 2023-12-22 11:29:43 · 979 阅读 · 0 评论 -
PAT 乙级 1023 组个最小数
解题思路:此题我用python和c语言分别作答,用c语言时候 我们注意到他给的是各个数的数量,我们只需要把第一个不为0的数找出来输出,其他就按他的数量挨个输出就可以,python的解法我用了另一个办法我把这个数按照次数从小到大给写了出来,但是注意人家说第一个数不能为0,所以我找到第一个数量不为0且不是0的数和首位进行互换,这就顺利的得到结果了。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。10 个数字的总个数不超过 50,且至少拥有 1 个非 0 的数字。原创 2023-12-21 16:02:00 · 491 阅读 · 0 评论 -
PAT 乙级 1022 D进制的A+B
python版本:我们利用列表的append方法和pop方法刚好可以组成栈 方便好多。解题思路:这题你可以利用数组,或者用栈最好,去存储各个位 我利用了栈。c语言版本:由于c没有自己的数据结构,需要自己写栈,略显麻烦一点。确实能看出python慢。原创 2023-12-21 12:15:07 · 530 阅读 · 0 评论 -
PAT 乙级 1021 个位数统计
解题思路:主要是利用hash 将各个位作为索引利用hash去求总数,如果是用python 那就直接可以利用字符串的count函数去求更方便快捷,从AC的图也能看出来 c比python往往快得多。原创 2023-12-20 15:18:53 · 404 阅读 · 0 评论 -
PAT乙级 1020 月饼
样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。解题思路,这题本质上是一个简单的排序题,我们首先先把他们的单价算出来,之后按照单价降序排序,看数量,够就全吃,不够就按单价剩余相乘就可以。原创 2023-12-20 11:53:52 · 748 阅读 · 0 评论 -
PAT 乙级 1019 数字黑洞
解法思路,我用c语言和python 做了这道题,这里面有一个小坑就是没说一定是4位整数,有可能是3位,2,1,位,用python排序时候需要注意,我c语言用的hash反而无所谓。原创 2023-12-16 20:40:29 · 544 阅读 · 0 评论 -
pat 乙级 1018 锤子剪刀布
解题思路,这题你硬比也可以,用技巧减少比较也可以,总共有九种情况 去掉 都相同的 还有6种,我的想法是这样 把 B C J 转换成了0 1 2,这样我们只要看他们大小就行,如果前面的比后面的小并且只差1,那就是前面的赢了,如果相差2就是后面的赢了,这样就把比较变成了4种。python版本略:大体思路一样 无非再用个字典。原创 2023-12-16 16:09:17 · 455 阅读 · 0 评论 -
PAT乙级1017 A除以B
解题思路:这题用python写非常非常容易,用c就麻烦很多,用python直接除就是了,但是用c就得用字符串按照我们现实大数除数一样一步一步的除然后一步一步的输出,我犯懒了写个python版的。本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。输入在一行中依次给出 A 和 B,中间以 1 空格分隔。在一行中依次输出 Q 和 R,中间以 1 空格分隔。作者 CHEN, Yue。原创 2023-12-15 19:07:27 · 561 阅读 · 0 评论 -
PAT 乙级 1016 部分A+B
解题思路,算出来数量挨个加就可以了。原创 2023-12-14 22:13:07 · 432 阅读 · 1 评论 -
PAT 乙级 1015 德才论
我们重点说一下cmp,里边包含俩个void* 指针,我们比较的时候得强制转换成我们数组元素类型,还有要记得 如果返回大于等于1是换,你把cmp前面参数那个想象成快排前面的数,后面的参数想象成快排后面的数,如果前面的数比后面的数大,你这样 写 renturn a-b;我们稍微解释一下qsort函数,这个函数是用c语言排序必用的函数,第一个参数是所要排序数组的地址也就是数组名,第二个参数是数组个数,第三个参数是每个元素字节数,第四个参数是一个函数指针,让你自己写怎么排序的。作者 CHEN, Li。原创 2023-12-15 17:16:44 · 955 阅读 · 0 评论 -
PAT 乙级 1014 福尔摩斯的约会
解题思路:这题可把我给弄惨了,研究了很长时间,原因一是第一次我用python写想用字典的get函数去处理字母和数字字符,利用默认值,可是万万没想到,字符串格式化对字符和数字的补0是不一样的,这个错误我找了好久其余的坑都一言我统一说一说。第二个点 必须是第一个已经找到,再去找第二个,第二个范围只能是0~9,A-N,判断的时候看好,并且一定是找到就跳出循环,不然后面可能还有满足的。这题第一个要注意的点是范围,大写字母,寻找日期的范围只能是A~G 刚好七个,判断的时候就要注明。原创 2023-12-14 15:10:23 · 1170 阅读 · 1 评论 -
PAT 乙级 1013 数素数
解题思路,简单素数判定,计算数量 输出就可以了。python代码思路一样但是某个数据超时。原创 2023-12-13 17:45:15 · 453 阅读 · 1 评论 -
PAT 乙级 1012 数字分类
解题思路:此题不难,但是烦在格式繁琐,需要注意的点特别多。原创 2023-12-13 16:50:09 · 460 阅读 · 1 评论 -
PAT乙级 1011 A+B 和 C
本题非常简单但是一样有坑,c语言写的时候一定要注意范围,如果你只用int型去写的话最大值相加一定溢出,所以你必须扩大字节数量,改成long long int,python没有此问题。原创 2023-12-13 16:25:06 · 478 阅读 · 1 评论 -
PAT 乙级1010 一元多项式求导
解题思路:这题我们能明显看到只和多项式指数为不为0有很大关系,如果指数都为9,也就是说是个常量我们有必要输出没有,因为导数为0啊,但要注意特殊情况就是,开始就是常数的情况 这种要输出 0 0。python我首先把字符串转换为字符列表,然后转化为数字列表,其余的都差不多。原创 2023-12-12 22:47:26 · 442 阅读 · 0 评论 -
pat乙级 1009 说反话
解题思路:我刚第一眼看到这个题的时候,我自己把题想复杂了,以为是多个空格的情况,再仔细一读题人家说单词之间只有一个空格,无所谓,我写了个有多个空格版本的一样可以,兼容性更好,利用的函数就是sscanf,因为sscanf性质去除之前的(空格,)字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。每个测试用例的输出占一行,输出倒序后的句子。原创 2023-12-12 11:33:51 · 450 阅读 · 0 评论