PAT刷题
以记录PAT刷题
Aaron_Yang.
大三软件工程在读,欢迎学习交流,一起进步
展开
-
PAT 人口普查(C++)
题目:某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。输入格式:输入在第一行给出正整数 N,取值在(0, 105 ];随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按 yyyy/mm/dd(即年/月/日)格式给出的原创 2021-07-12 14:04:17 · 181 阅读 · 0 评论 -
PAT 日期之差(C++以及JAVA 简易版本)
题目:给定两个日期,请你计算这两个日期之间有少天(定义连续的日期之差为2天)输入格式:共两行,每一行输入一个日期,日期格式为yyyy-MM-dd输出格式:一个正整数,为两个日期之间的差输入样例:2021-07-022021-07-15输出样例:14解法一:(c++)#include<iostream>using namespace std;int mon[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };bool j原创 2021-07-12 13:57:28 · 123 阅读 · 0 评论 -
PAT 2016:L2—013 红色警报(dfs)
题目:战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。输入格式:输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数。随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔。在城市信息之后给出被攻占的信原创 2021-07-20 17:05:58 · 134 阅读 · 0 评论 -
L1-8 估值一亿的AI核心代码 (正则表达式匹配) C++
原题:以上图片来自新浪微博。本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:无论用户说什么,首先把对方说的话在一行中原样打印出来;消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;把原文中所有大写英文字母变成小写,除了 I;把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词;把原文中所有独立的 I 和 me 换成 you;把原创 2021-08-16 11:00:13 · 503 阅读 · 1 评论 -
L1-058 6翻了(正则表达式)
题目:“666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。输入格式:输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。输出格式:从左到右扫描输入的句子:如果句子中原创 2021-08-16 09:47:19 · 181 阅读 · 0 评论 -
PAT 两点间有路径吗? (并查集) C++
题目:对于给定的无向图以及图中的两个顶点,计算两个顶点所在的连通分量中的顶点数,并且判断这两个顶点之间是否有路径。输入格式:第一行是不超过20的正整数N,表示图有N个顶点,顶点的编号即0~N-1;接下来N行,是N*N的邻接矩阵,矩阵的元素间用空格分隔;最后一行是用空格隔开的两个顶点编号v和w输出格式:第一行输出v所在的连通分量的顶点数第二行输出w所在的连通分量的顶点数第三行,若v和w之间有路径,则输出Yes,否则输出No注意:当v和w是同一个顶点时,认为v和w之间是有路径的。输入样例:原创 2021-08-05 14:27:57 · 385 阅读 · 0 评论 -
PAT 列出连通集(dfs+bfs)
题目:给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。输出格式:按照"{ v1v2… vk }"的格式,每行输出一个连通集。先输出DFS的结果,再输出BFS的结果。输入样例:8 60 70 12 04 12原创 2021-08-05 11:29:57 · 832 阅读 · 0 评论 -
PAT 路径判断(并查集解法)
题目:给定一个有N个顶点和E条边的无向图,请判断给定的两个顶点之间是否有路径存在。 假设顶点从0到N−1编号。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。最后一行给出两个顶点编号i,j(0≤i,j<N),i和j之间用空格分隔。输出格式:如果i和j之间存在路径,则输出"There is a path between i and j.",否则输出"There is no path b原创 2021-08-05 11:26:57 · 829 阅读 · 0 评论 -
PAT 图的删边操作
题目:请编写程序对给定的有向图删除若干条边。有向图中包含n个顶点,编号为0至n-1。输入格式:输入第一行为两个正整数n和e,分别表示图的顶点数和边数,其中n不超过20000,e不超过1000。接下来e行表示每条边的信息,每行为3个非负整数a、b、c,其中a和b表示该边的端点编号,c表示权值。各边并非按端点编号顺序排列。随后一行为一个整数k,表示删除的边的条数,接下来k行,每行为2个非负整数a、b,表示待删除的边为a->b。保证删除的边一定在原图中。输出格式:输出执行删边操作之后的图。每行表示原创 2021-08-05 11:24:44 · 1565 阅读 · 0 评论 -
PAT 图的创建
题目:请编写程序创建一个有向图。有向图中包含n个顶点,编号为0至n-1。输入格式:输入第一行为两个正整数n和e,分别表示图的顶点数和边数,其中n不超过20000,e不超过1000。接下来e行表示每条边的信息,每行为3个非负整数a、b、c,其中a和b表示该边的端点编号,c表示权值。各边并非按端点编号顺序排列。输出格式:按顶点编号递增顺序输出每个顶点引出的边,每个顶点占一行,若某顶点没有引出边,则不输出。每行表示一个顶点引出的所有边,格式为a:(a,b,w)……,表示有向边a->b的权值为w,a原创 2021-08-05 11:22:22 · 2462 阅读 · 0 评论 -
PAT 木棒切割问题(二分)
原题:给出N根木棒,且长度均已知,现在希望通过切割来得到至少K段长度相等的木棒(长度必须是整数),问这些长度相等的木棒最长能有多长。输入格式:首先在第一行中给出木棒数N和需要得到相同长度的木棒K段。 接下来一行给出N个数据,表示每个木棒的长度。输出格式:输出木棒的在能满足切割K段时最长长度。输入样例:在这里给出一组输入。例如:3 710 24 15输出样例:在这里给出相应的输出。例如:6代码:(二分法)#include<cstdio>#include<i原创 2021-07-27 08:49:09 · 340 阅读 · 0 评论 -
PAT【L2-016】愿天下有情人都是失散多年的兄妹(dfs超详解)
原题呵呵。大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人、父母、祖父母、曾祖父母、高祖父母)则不可通婚。本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚?输入格式:输入第一行给出一个正整数N(2 ≤ N ≤10^4 ),随后N行,每行按以下格式给出一个人的信息:本人ID 性别 父亲ID 母亲ID其中ID是5位数字,每人不同;性别M代表男性、F代表女性。如果某人的父亲或母亲已经不可考,则相应的ID位置上标记为-1。接下来给出一个正整数K,随后K行,每行给出一对有原创 2021-07-24 13:06:18 · 483 阅读 · 0 评论 -
PAT【L3-010】是否完全二叉搜索树(详解)
原题:将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。输入格式:输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。输出格式:将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出YES,如果该树是完全二叉树;否则输出NO。输入样例1:938 45 42 24 58原创 2021-07-24 12:55:10 · 407 阅读 · 0 评论 -
PAT 最近距离(dfs)
原题:在一个游戏中,玩家处于一个如下所示12行12列的迷宫:0,1,0,0,0,1,1,1,0,1,0,10,0,0,1,0,0,0,0,1,0,0,10,1,0,1,0,1,1,1,0,1,0,00,1,0,0,0,0,0,1,0,0,1,10,0,0,0,1,0,0,0,0,0,0,00,0,1,0,0,0,1,0,0,0,1,00,0,1,0,0,0,0,0,1,0,0,01,0,0,1,0,1,0,0,0,1,0,10,0,1,0,1,0,1,0,1,0,0,00,0,0,0,原创 2021-07-24 11:18:56 · 158 阅读 · 2 评论 -
回文串的切割(记忆化搜索改进版)
原题:Alan觉得回文串是个好东西,可是Alan忘记怎么做了,于是想请你帮帮忙:给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案的个数。输入格式:输入一个字符串s0 ≤ len(s) ≤ 64输出格式:输出一个整数代表方案个数。输入样例:aab输出样例:2样例解释所有可能的方案是:[ ["aa","b"], ["a","a","b"]]输入样例:aabccb输出样例:6样例解释:所有可能的方案是:[原创 2021-07-24 11:15:48 · 473 阅读 · 0 评论 -
PAT 滑雪(记忆化搜索)
原题:trs喜欢滑雪。他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形。为了得到更快的速度,滑行的路线必须向下倾斜(即高度递减)。例如样例中的那个矩形,可以从某个点滑向上下左右四个相邻的点之一。例如24-17-16-1,其实25-24-23…3-2-1更长,事实上这是最长的一条。输入格式:第1行: 两个数字r,c(1≤r,c≤100),表示矩阵的行列。第2…r+1行:每行c个数,表示这个矩阵。输出格式:仅一行: 输出1个整数,表示可以滑行的最大长度。输入原创 2021-07-23 08:33:46 · 156 阅读 · 0 评论 -
建立二叉树详解版(先序序列+中序序列 && 中序序列+后序序列)
问题一:如何根据先序序列+中序序列建立二叉树?输入样例:第一行输入序列长度n,第二行输入n个字符表示二叉树先序遍历的序列,第三行输入n个字符表示二叉树中序遍历的序列9ABDGHCEFIGDHBAECIF输出样例:输出二叉树后序遍历的序列。GHDBEIFCA思路:一道非常基础的二叉树问题,而解决这类问题是有模板的。也就是根据遍历顺序来入手,即可解决。在创建左子树和右子树的时候,对边界点会有疑问,我比较推荐自己画一个图,这样可以定位到你要的那个点。(这里数字顺序与遍历无关,只是为了定位原创 2021-07-22 16:59:50 · 2697 阅读 · 0 评论 -
PAT:输出GPLT
原题:给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT…这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。输入格式:输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。输出格式:在一行中按题目要求输出排序后的字符串。题目保证输出非空。输入样例:pcTclnGloRgLrtLhgljkLhGFauPewSKgt原创 2021-07-22 15:46:51 · 172 阅读 · 0 评论 -
进制转换(Q进制转换成T进制)详解版
题目:给定一个整数Q(2<=Q<=10),一个非空字符串,以及另一个整数T(2<=T<=10), 编程要求过滤掉字符串中所有非Q进制数对应的字符组成一个新的字符串,该字符串无正负号,将该字符串表示的Q进制数转换为T进制数的字符串输出。输入格式:第一行输入一个整数Q, 代表Q进制(2<=Q<=10)第二行输入以回车结束的一行非空字符串。第三行输入一个整数T, 代表要转换成T进制输出格式:输出转换后的T进制数字符串。输入样例:10152输出样例:原创 2021-07-22 15:33:28 · 1695 阅读 · 0 评论 -
PAT 7-4 毕业照 (双向队列法)
题目:照毕业照一定要排好队,不然就会有人被挡住,造成终身遗憾。假设有N个毕业生,准备排K行,拍毕业照的摄影师定下这么几条规矩: 1、每一行的人数一定是N/K个,如果有多的同学,全部站最后一排; 2、后排的一定不能比前排任何一个同学矮; 3、在任意一排,个子最高的站中间,之后次高的站他的右边,第三高的站他的左边,第四高的又站右边,这样依次轮换。例如,有5个同学,身高依次是190厘米,188厘米,186厘米,175厘米和170厘米,那么最后应该排成175,188, 190,186, 170。这里我们假设摄影师原创 2021-07-16 08:44:10 · 341 阅读 · 0 评论 -
图的先广搜索
题目:输出无向图的给定起点的先广序列。输入格式:输入第一行给出三个正整数,分别表示无向图的节点数N(1<N≤10)、边数M(≤50)和探索起始节点编号S(节点从1到N编号)。随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号。输出格式:输出从S开始的无向图的先广搜索序列,用一个空格隔开,最后也有一个空格;如果为非连通图,再在结尾处另起一行输出一个0,表示此图非连通。由于广度优先遍历的节点序列是不唯一的,为了使得输出具有唯一的结果,我们约定以表头插入法构造邻接表原创 2021-04-03 23:05:04 · 2895 阅读 · 0 评论 -
说反话-加强版
题目:给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。输出格式:每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。输入样例:Hello World Here I Come输出样例:Come I Here World Hello思路:题目要逆向输出,因此可以原创 2021-07-13 13:46:38 · 104 阅读 · 5 评论 -
PAT 乙等 1018 锤子剪刀布
题目:输入格式:输入第 1 行给出正整数 N(≤10^5 ),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。输出格式:输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个空格分隔。第 3 行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有 1 个空格。如果解不唯一,则输出按字母序最小的解。输入样例:10C JJ B原创 2021-03-07 14:13:28 · 266 阅读 · 0 评论 -
PAT 乙等 1019 数字黑洞
题目:输入格式:输入给出一个 (0,10^4 ) 区间内的正整数 N。输出格式:如果 N 的 4 位数字全相等,则在一行内输出 N - N = 0000;否则将计算的每一步在一行内输出,直到 6174 作为差出现,输出格式见样例。注意每个数字按 4 位数格式输出。输入样例 1:6767输出样例 1:7766 - 6677 = 10899810 - 0189 = 96219621 - 1269 = 83528532 - 2358 = 6174输入样例 2:2222输出样例 2:原创 2021-03-07 14:05:24 · 164 阅读 · 0 评论 -
PAT 乙等 1020 月饼
题目:月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。原创 2021-03-07 13:57:25 · 114 阅读 · 0 评论 -
PAT 乙等 1021 个位数统计
题目:输入格式:每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。输出格式:对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。输入样例:100311输出样例:0:21:33:1分析:依次检索各个数字,用一个数组存放每个数字出现的次数,通过for循环进行检索,最后打印即可。代码:#include<iostream>#include<string.h>us原创 2021-03-07 13:50:35 · 92 阅读 · 0 评论