![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT甲级题目
★飞翔的企鹅★
有朝一日,这里会写不开!
展开
-
1143 Lowest Common Ancestor
题目大意给定一棵BST树的先序遍历,再给出任意两个节点(不一定存在该节点),让你输出两个节点的最低公共祖先。思路解析本题有两种做法,下面分别介绍:1. 法一:见到BST就要想到中序遍历、从小到大、先序还原的特性。但本题难就难在先序还原上。以前的做法都是按照先序序列逐个insert,但如果对于一棵单支树,也就是最差的...原创 2019-11-23 19:30:01 · 169 阅读 · 0 评论 -
1139 First Contact
题目大意假设A是男生,B是女生。A看上了B,于是A先去找同性基友C,C找靓妹D,D转告B。要保证C和A是同性,D和B是同性。如果A和B是同性,则C和D也和他们同性。思路解析本题有个坑就是要注意-0000的情况。所以不能单纯的用int处理,要用string,长度不同的就是异性。所以要仔细审题啊,考...原创 2019-11-13 18:55:18 · 155 阅读 · 0 评论 -
1135 Is It A Red-Black Tree
题目大意给一棵二叉搜索树的前序遍历,判断它是否为红黑树,是输出Yes,否则输出No。思路解析第一眼看到红黑树着实吓了一跳,暗想陈姥姥真狠……但是题意倒不难,一遍就AC了。本题比较纠结的是第3条注解,是在不理解什么意思,于是直接把它忽略了,事实证明没有任何影响。所以本题所用到的红黑树判定条件是这样的:1. 根节点是...原创 2019-11-09 20:13:11 · 111 阅读 · 0 评论 -
1131 Subway Map(两种解法)
题目大意给出各地铁线所经过的站点,构成一张地铁交通图。再给出起点和终点,让你找出最快的一条路径,如果路径不唯一就选择中转次数最少的那一条。思路解析本题是铁了心的要考邻接表。传统的Dijkstra + DFS最后一个测试点会超时(末尾也会附上该解法)。本题的难点是判断中转站和...原创 2019-11-06 19:43:23 · 1382 阅读 · 0 评论 -
1130 Infix Expression
题目大意给出一棵树,让你输出中缀表达式。但是要符合括号格式。思路解析既然是中缀表达式妥妥的中序遍历没毛病。关键就是括号问题,仔细观察发现,括号是把左右子树分别括了起来,只有一个左右节点的不加括号;比如:这种情况输出结果是BAC,而不是(B)A(C)二叉树的解题关键要把规模缩小,只着眼于三个节点的基本二叉树模...原创 2019-11-02 12:12:45 · 222 阅读 · 0 评论 -
1129 Recommendation System
题目大意类似于操作系统中LRU(最近最少使用算法)。给出用户最近浏览记录,根据访问频数让你列出他接下来最有可能访问的K项,按照可能性递减,如果可能性相同则按索引升序。思路解析题目本身不难,如果对C++和容器操作掌握不好可就很难了……(没错,说的就是我……)为了排序和唯一性自然想到set,set中的元素是复杂类型no...原创 2019-11-01 20:03:53 · 359 阅读 · 0 评论 -
1128 N Queens Puzzle
题目大意给出一个皇后图,以这样的方式给出:一个数组包含n个数字,每个数字表示该列的皇后所在的行数,判断给出的皇后图是否满足不会互相攻击(任意两个皇后都要不在同一行或者同一列,且不在斜对角线上)。思路解析第一次操作八皇后问题,见识到了对角线问题的处理方法。用vec[n]存储一张图给出的数字~对于第j个数字,判断前0~...原创 2019-10-31 20:11:55 · 151 阅读 · 0 评论 -
1126 Eulerian Path
题目大意欧拉路径:每条边均被访问到,且仅访问一次。 欧拉回路:起始点都相同的欧拉路径。所有顶点都具有偶数个度的连通图存在欧拉回路,称为Eulerian;如果有两个顶点有奇数个度,则这两个点为欧拉回路的起始点。有欧拉路径但是不存在欧拉回路的图称为semi-Eulerian....原创 2019-10-30 20:10:41 · 223 阅读 · 0 评论 -
1123 Is It a Complete AVL Tree
题目大意按照给出的顺序将节点插入一棵二叉树中,使得这棵树成为二叉平衡搜索树。最后输出层序遍历,并判断是否是一棵完全二叉树。思路解析把AVL树调整代码敲上去就可以了,需要牢记模板。关于AVL树的有关讲解请移步:点击这里示例代码#include<iostream>#include<algori...原创 2019-10-29 20:06:12 · 90 阅读 · 0 评论 -
1119 Pre- and Post-order Traversals
题目大意给出一棵树的结点个数n,以及它的前序遍历和后序遍历,输出它的中序遍历,如果中序遍历不唯一就输出No,且输出其中一个中序即可,如果中序遍历唯一就输出Yes,并输出它的中序.思路解析解决本题首先要弄清楚什么时候对应多棵树,当只有一个子树的时候才会出现多组解。证明也很简单,将一棵规模很大的树看做只有根左右三个节点的...原创 2019-10-28 18:40:45 · 137 阅读 · 0 评论 -
1114 Family Property
题目大意给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。首先在第一行输出家庭个数(所有有亲属关系的人都属于同一个家庭)。随后按下列格式输出每个家庭的信息:家庭成员的最小编号 家庭人口数 人均房产套数 人均房产面积。其中人均值要求保留小数点后3位。家庭信息首先按人均面积降序输出,若有...原创 2019-10-24 18:48:07 · 397 阅读 · 0 评论 -
1112 Stucked Keyboard
题目大意键盘某些键卡住了,按一次重复k次,要求找出可能的键,并且输出正确的字符串顺序。可能的键要求按照被发现的顺序输出。思路解析本来以为第一题是道水题,没想到来了个惊喜。当然题目不难,只是比较考验编程技巧,所以解法不计其数,下面给出我的分析:维护两个map集合,mapp和mapp2分别存放坏掉的和正常的按键。i...原创 2019-10-22 20:28:38 · 144 阅读 · 0 评论 -
1111 Online Map
题目大意给一张地图,两个结点中既有距离也有时间,有的单行有的双向,要求根据地图推荐两条路线:一条是最快到达路线,一条是最短距离的路线。第一行给出两个整数N和M,表示地图中地点的个数和路径的条数。接下来的M行每一行给出:道路结点编号V1 道路结点编号V2 是否单行线 道路长度 所需时间要求第一行输出最快...原创 2019-10-20 11:43:06 · 258 阅读 · 0 评论 -
1107 Social Clusters
题目大意有n个人,每个人喜欢k个活动,如果两个人有任意一个活动相同,就称为他们处于同一个社交网络。求这n个人一共形成了多少个社交网络。思路解析可将爱好看做边,人看做顶点。所以本题问的就是极大联通子图的个数,与各联通子图内顶点的数量。由于本题并没有给出顶点的信息,而是各条边的信息。所以必然要用并查集统计连通图的个数。...原创 2019-10-19 09:10:52 · 87 阅读 · 0 评论 -
1103 Integer Factorization
题目大意给三个正整数N、K、P,将N表示成K个正整数的P次方和,其中,这K个正整数必须递减排列,允许重复,如果有多种方案,选择底数n1+…+nk最大的方案,如果还有多种方案,选择底数序列的字典序最大的方案。思路解析穷举法暴力模拟,为了避免超时,一般都把待选数放到一个数组里,而不是每次重新计算。我一开始以为给定第一个数...原创 2019-10-16 20:02:06 · 595 阅读 · 0 评论 -
1099 Build A Binary Search Tree
题目大意给出一棵树的结构,再给出一串数字序列,让你数字填空,使得这棵树为二叉搜索树。思路解析见到BST就要想到中序遍历,已经形成PAT套路了。本题也不例外,先将所给数字升序排列,然后在中序遍历的过程中填空就可以。示例代码#include<iostream>#include<vector&g...原创 2019-10-11 20:50:09 · 338 阅读 · 0 评论 -
币值转换 Java版
5-23 币值转换 (20分)输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。输入格式:输入在一行中给出一个不超过9位的非负整数。输出...原创 2018-12-28 22:11:40 · 938 阅读 · 0 评论 -
猴子选大王 Java
7-28 猴子选大王 (20 分)一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?输入格式:输入在一行中给一个正整数N(≤1000)。输出格式:在一行中输出当选猴王的编号...原创 2019-02-17 12:05:50 · 1850 阅读 · 0 评论 -
删除字符串中的子串 Java 拒绝成为调包侠(KMP算法的应用)
7-29 删除字符串中的子串 (20 分)输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。输入格式:输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。输出格式:在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。输入样例:Tomcat is a male ccatat输出样例:Tom ...原创 2019-02-18 19:30:55 · 502 阅读 · 0 评论 -
有理数均值 java
有理数均值 (20 分)本题要求编写程序,计算N个有理数的平均值。输入格式:输入第一行给出正整数N(≤100);第二行中按照a1/b1 a2/b2 …的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数;如果是负数,则负号一定出现在最前面。输出格式:在一行中按照a/b的格式输出N个有理数的平均值。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。输入样例1:4...原创 2019-03-18 09:30:37 · 514 阅读 · 0 评论 -
整数分解为若干项之和 Java
将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。输入格式:每个输入包含一个测试用例,即正整数N (0<N≤30)。输出格式:按递增顺序输出N的所有整数分解式子。递增顺序是指:对于两个分解序列N1={n1,n2,⋯}和N2={m1,m2,⋯},若存在i使得n...原创 2019-03-25 08:03:48 · 8662 阅读 · 1 评论 -
1003 我要通过! (20 分) Java版
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;如果 aPbTc...原创 2019-03-30 13:06:26 · 930 阅读 · 0 评论 -
PAT 1010 一元多项式求导 Java
设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn-1。)输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 00。输入样例:3 4 -5 2 6 1 -2 ...原创 2019-04-06 13:21:58 · 350 阅读 · 0 评论 -
1024 科学计数法 C++版
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。输入格式:每个输入包含 1 个测试用例,即一个以科学计数法表示...原创 2019-05-03 08:52:40 · 800 阅读 · 0 评论 -
1017 A除以B (20 分) C++版
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。输入格式:输入在一行中依次给出 A 和 B,中间以 1 空格分隔。输出格式:在一行中依次输出 Q 和 R,中间以 1 空格分隔。输入样例:123456789050987654321 7输出样例:17636684150141093474 ...原创 2019-04-28 21:39:02 · 1038 阅读 · 2 评论 -
1018 锤子剪刀布 C++版
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。输入格式:输入第 1 行给出正整数 N(≤105),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方...原创 2019-04-28 21:47:13 · 433 阅读 · 0 评论 -
1020 月饼 (25 分) C++版
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 1...原创 2019-04-28 21:53:39 · 459 阅读 · 0 评论 -
1025 反转链表 C++版
给定一个常数 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...原创 2019-05-04 13:59:58 · 447 阅读 · 0 评论 -
1027 打印沙漏 C++
思路分析:这是一道基于等差数列的问题。取沙漏的上半部分为研究对象:从底向上*号个数分别为1、3、5、7……不难发现,该数列为首项为1,差为2的等差数列。通项公式为2n-1,前n项和为n2, 沙漏下方同理。取整个沙漏为研究对象,则整个沙漏的 *号个数为2n2-1。n可求。综上,可先求上半部分,然后反转得到下半部分。值得注意的是:1. 星号右方是没有空格的;2. 即使所有符号都用上最后也...原创 2019-05-04 20:59:08 · 1092 阅读 · 0 评论 -
1028 人口普查 C++
思路分析:这道题本身是很有意义的,只是被简化了反倒显得很无趣。请让我们站在实际的情况下思考这个问题:1. 设如果最年长和最年轻的人有并列,则按字母序输出名字;2. 保证镇上每个人的名字是唯一的,即名字作为个人ID,不存在重名现象;其他条件不变,请尝试编程实现。先贴出原题示例代码:#include<iostream>#include<set>#includ...原创 2019-05-05 16:19:39 · 401 阅读 · 0 评论 -
1033 旧键盘打字
思路分析:本题主要有两种思路,第一种是边检测边输出,筛选合法的字符;第二种是筛选不合法的字符,剔除后即为结果。本人用的是第二种,需要注意的细节请留意代码注释。另外值得注意的是,cin无法读入空串,须使用getline方法。要导入#include示例代码:#include<iostream>#include<string>using namespace std;...原创 2019-05-11 19:03:48 · 107 阅读 · 0 评论 -
1035 插入与归并 (25 分) C++
解题思路:本题需要对插入排序和归并排序有一定的了解。对于插入排序,可将序列看做前后两个组成部分,前部分一定是有序的,后部分保持原数组元素不变;本题涉及的归并排序并非实际算法的归并排序算法。真正的归并排序是“先左后右,分而治之” 的,而并非本题从头到尾一组一组的排。笔者一开始就天真的以为直接敲出来归并算法,然后加上判读就可以了。然而还是naive了。本题所的归并过程是这样的:对于任意一串...原创 2019-05-25 19:53:52 · 350 阅读 · 0 评论 -
1034 有理数四则运算 C++
思路分析:题目本身不难,方向选错了会很麻烦;(受Java的影响,笔者一开始读分数的时候就费了九牛二虎之力,浪费了半天的时间,后来才想起来C语言的scanf函数……)数据有可能溢出,要先约分再计算(虽然测试点给的数据都很善良,但要养成数据约分的习惯);代码示例:#define _CRT_SECURE_NO_WARNINGS#include<iostream>using ...原创 2019-05-18 12:59:23 · 650 阅读 · 0 评论 -
1040 有几个PAT C++
思路分析:这种统计类型的问题,有多种解决方案,但最简单的还是以中间某个字符为基准,分别统计该字符前后符合模式串要求的字符的个数,相乘即为结果。另外需要注意的是,对于大数,如阶乘,一般都对10000000007取余。这是因为1000000007 是最小的十位质数。模1000000007,可以保证值永远在int的范围内。示例代码:#include<iostream>using ...原创 2019-06-02 11:41:30 · 258 阅读 · 0 评论 -
1043 输出PATest C++
思路分析:将 ‘P’、‘A’、‘T’、‘e’、‘s’、‘t’ 六个字母分别统计个数,将六个字母为一组循环输出,并将次数减一。直到全为0。也可以将每种字母拼成一串字符串,每次删除其中一个元素,直到六个字符串为空。笔者用的就是这种方案。示例代码:#include<iostream>using namespace std;int main() { string P, A, T...原创 2019-06-02 15:33:55 · 207 阅读 · 0 评论 -
1044 火星数字 C++
思路分析:在开始之前需要建立两张映射表,分别反映低位火星文映射表maps和高位火星文映射表maps2对应十进制数的关系。数组角标即为所对应的十进制数。之后在main函数中执行以下操作:由于“火星文”中有可能含有空格,需要用getline(),在使用它之前需要注意要把上一行末尾的换行符“吸收”掉,否则读到的会是空串,使用getchar()即可做到。判断读到的数据是数字还是字母,可以通...原创 2019-06-02 20:25:29 · 302 阅读 · 0 评论 -
1045 快速排序 C++版
思路解析:主元元素的左边元素必小于等于它,右边元素必大于等于它。所以,如果将该序列升序排列后,主元元素的位置应该是不变(主元元素没有重复),或者是向后移动的(主元元素有重复)。为了防止第二种情况导致的重复统计主元个数的问题,需要记录当前判断元素之前的最大元素,当大于最大元素的时候显然为新的主元。具体步骤:声明三个容器,第一个存放升序排列的元素,第二个存放原始序列元素,第三个存放主元元...原创 2019-06-09 09:27:59 · 1219 阅读 · 2 评论 -
1049 数列的片段和 C++
思路解析:由于本题是统计所有片段和,所以从整体比从局部分析更便捷。片段和等于各元素在各片段里出现次数与它本身之积的和。设第i个数为要统计的元素为a,则以a为尾的片段共有i种,即:1 2…i、2 3…i、3 4…i、i,以a为头的片段共有n-i+1种,即:i i+1…n、i+1 i+2…n、n。所有包含元素a的片段共有i*(n-i+1)种。所以所有元素a的和为ai(n-i+1)。另外值...原创 2019-06-09 18:39:20 · 248 阅读 · 0 评论 -
1050 螺旋矩阵 C++
思路分析:由于涉及到矩阵问题,使用二维数组比较方便。将每一层矩阵(顺时针一圈为一层)看做一个小整体,整个矩阵是由若干个小整体从外向内一圈圈包围起来的。每个小整体又可看做由四小部分组成的,分别是上、右、下、左四部分。设法先找到每一小部分直接相连部分的次序关系,再循环执行小整体代码便可得到所求的螺旋矩阵。为了方便找到连接点之间的规律,我们直接以角标排序。具体步骤:创建一个二维数组gra...原创 2019-06-15 14:14:14 · 1600 阅读 · 0 评论 -
1055 集体照 C++
思路分析:这道题乍一看挺麻烦的,其实则不然。本题主要难点是以下两步:1.首先需要将所有人按给定的排序规则存储到容器中,这就需要用到容器的自定义排序。2.”每排其他人以中间人为轴,按身高非增序,先右后左交替入队站在中间人的两侧” 这句话看似很复杂,其实只需要用双端队列就可以解决,当然也可以找到数字之间的规律。具体步骤:声明结构体或类,取名为Person,内部维护name、height两...原创 2019-06-23 09:47:19 · 338 阅读 · 0 评论