PAT_甲级_1043 Is It a Binary Search Tree

2020-11-15
阅读 7 分钟
1.1k
我们首先通过给定的N个结点直接构建一个二叉查找树,然后再获得其先序遍历序列和镜像先序遍历序列,分别判断是否和输入的序列相等,如果输入的序列是先序遍历序列,那么就输出YES并获得其后序遍历序列进行输出,如果输入序列是镜像先序遍历序列,那么就输出YES并获得镜像后序遍历序列进行输出,如果都不是,就输出NO。

PAT_甲级_1053 Path of Equal Weight

2020-11-14
阅读 3 分钟
1.7k
给定一颗树和每个结点的权值,求从所有根结点到叶子结点的路径,使得每条路径上的权值之和等于给定的常数S.如果有多条路径,按照路径的非递增序列输出

PAT_甲级_1004 Counting Leaves

2020-11-13
阅读 2 分钟
992
直接遍历这颗树,在遇到叶子节点的时候,就统计当前层次下的叶子节点的个数,这里使用num_leaves_per_level保存每一层叶子节点的数目。遍历结束后,直接输出num_leaves_per_level数组即可。层序遍历代码如下:

PAT_甲级_1106 Lowest Price in Supply Chain

2020-11-13
阅读 2 分钟
989
给出一颗销售供应树,根结点为0,在树根处售价为P,然后从根节点开始每往子节点走一层就,该层的货物的价格就会在上一层的价格上增加r%,要求获得叶子结点最低售价以及最低售价的个数。

PAT_甲级_1094 The Largest Generation

2020-11-13
阅读 2 分钟
950
此题也是考察树的遍历,可以使用先序遍历或者层序遍历建立每一层和节点个数的关系,这里采用了层序遍历,直接在出队节点的时候就先更新当前层的节点个数,然后更新最多节点数目和层数。对应代码如下:

PAT_甲级_1090 Highest Price in Supply Chain

2020-11-13
阅读 2 分钟
1k
给出一颗销售供应树,根结点为0,在树根处售价为P,然后从根节点开始,每一层的货物的价格就会在上一层的价格上增加r%,要求输出售价最高的零售商和其个数。

PAT_甲级_1079 Total Sales of Supply Chain

2020-11-13
阅读 2 分钟
1.1k
给出一颗销售供应树,根结点为0,在树根处售价为P,然后从根节点开始,每一层的货物的价格就会在上一层的价格上增加r%,给出每个叶结点的货物量,要求计算所有叶结点的销售总额。

PAT_甲级_1102 Invert a Binary Tree

2020-11-12
阅读 2 分钟
1.2k
这个题目有两种方法可以求解,一是按照题目要求直接将二叉树进行反转获得新的二叉树,然后再遍历。第二种就是不改变二叉树,作镜像遍历,也即是之前先遍历左孩子,现在变成先遍历右孩子,毕竟只需要输出遍历的结果,就无需进行二叉树的反转,这里选择用第二种,当然了,如果想要反转的话,直接使用后序遍历的方法,在最后访问根节点...

PAT_甲级_1086 Tree Traversals Again

2020-11-12
阅读 2 分钟
957
首先得说一个结论,就是栈的入栈序列就是一颗二叉树的先序遍历,出栈序列就是一颗二叉树的中序遍历序列,那么这个题目就转化为根据先序和中序求后序遍历序列。那么首先就是根据先序和中序建立二叉树,然后根据这个二叉树进行后序遍历获得后序遍历序列。

PAT_甲级_1020 Tree Traversals

2020-11-12
阅读 3 分钟
1.1k
使用递归建立二叉树,假设递归过程中某步的后序区间是$[beginPost,lastPost]$,中序区间是$[beginIn,lastIn]$,那么根节点为$post[lastPost]$,首先初始化根节点$root$,接着需要在中序遍历中找到根节点的位置$index_root$,然后计算左子树的个数leftTreeLen = index_root-beginIn,这样左子树和右子树在后序和中序遍历中就分...

PAT_甲级_1091 Acute Stroke

2020-11-11
阅读 3 分钟
1k
给定一个三维数组,数组元素的取值为0或者1,与某一元素相邻的元素是上下左右前后6个方向的元素,如果有若干个1相邻,那么就称这些1所组成的区域为一个块,如果块中1的个数不低于T个,那就称这个块为stroke core,现在要求计算所有stroke core的1个累计个数.

PAT_甲级_1103 Integer Factorization

2020-11-11
阅读 5 分钟
1.6k
给定正整数N,K,P,将N表示为K个正整数的P次方和(递减排序),如果有多个选择底数和最大的方案,如果还有多个,选择底数序列字典序最大的序列

PAT_甲级_1097 Deduplication on a Linked List

2020-11-10
阅读 3 分钟
1k
首先使用node存储所有输入的节点,removed存储需要删除的节点。由于需要判断node中的节点是否需要删除,我们使用isExist表示与该节点数据的绝对值相同的节点是否存在,使用work_n保存当前指向在node的哪个节点,初始为begin_address,只要isExist[abs(node[work_n].data)]==true,就说明需要将该节点移除到removed链表中...

PAT_甲级_1052 Linked List Sorting

2020-11-10
阅读 2 分钟
1k
我们首先用$node$数组存储所有输入的结点,在输入的时候使用$dataToAddress$记录数据到地址的映射(数据和地址是绑定的,无论怎么样都不会变化),由于对于输入可能会有不在链表上的结点,所以使用$isExist$记录所有输入的节点,这样就可以判断起始节点是否存在输入节点中,目的是为了解决链表为空的情况。对于只有部分有效节...

PAT_甲级_1032 Sharing

2020-11-10
阅读 2 分钟
1.1k
由于之前在考408做过做过题,所以思路用的就是王道书上讲的(过了好久还记得,$ε=(′ο`*)))$唉),我们使用$node$数组存储所有输入的节点,使用$word1$存储第一个单词组成的链表,$word2$存储第二个单词组成的链表。我们首先遍历$node$数组,获取$word1$链表和其长度$lengthOfWord1$,$word2$链表和其长度$lengthOfWord2$.然...

PAT_甲级_1074 Reversing Linked List

2020-11-09
阅读 3 分钟
1.2k
现有一个长度为N,起点为begin_address的单链表,要求每K个结点进行逆置,最后不够K个结点的不用逆置,要求输出最后逆置完成的单链表。

PAT_甲级_1056 Mice and Rice

2020-11-08
阅读 7 分钟
1.4k
给出NP只老鼠的质量,并且给出它们比赛的顺序,然后每NG只老鼠为一组,最后不够NG只的也为一组,然后组内竞赛,体重最大的胜出进入下一轮比赛,本轮比赛输掉的排名均一样,要求输出按照编号从小到大输出最后的排名,这里得注意下题目的意思,也就是第3行给的数据,这个实际上是老鼠的下标,然后输出的顺序是按照0到NP-1的顺序

PAT_甲级_1051 Pop Sequence

2020-11-07
阅读 3 分钟
932
第一个就是得看清楚题目,题目说的是入栈序列为1到N,意思是入栈的顺序得按照1到N进行输入,在输入的时候可以有出栈操作。然后我们选择 STL库中的stack<int> s作为我们的操作数栈,使用pop_num保存当前待比较的出栈序列的元素(需要输入),然后在每一次的查询过程中,用isPossible记录当前查询的出栈序列是否合法,初始...

PAT_甲级_1022 Digital Library

2020-11-06
阅读 2 分钟
1k
给出N本书的编号、书名、作者、关键词(可能有多个)、出版社及出版年份,并给出M个查询,每个查询给出书名、作者、关键词(单个)、出版社及出版年份中的一个,要求输出满足该给出信息的所有书的编号。

PAT_甲级_1071 Speech Patterns

2020-11-06
阅读 2 分钟
1.2k
直接一边输入一边处理就好,使用c保存输入的每一个字符,s保存出现的每一个单词,如果是大写字符就转化为小写字符,然后将c添加到s的末尾,如果是小写字符或者数字将c添加到s的末尾,如果是其他字符并且s不为空,就开始统计该单词出现的次数,同时判断当前单词s的次数是否为最大,如果是就更新max_count和r(保存输出结果...

PAT_甲级_1100 Mars Numbers

2020-11-06
阅读 5 分钟
1k
用unit数组保存10进制个位到火星文个位的映射,用decade数组保存10进制十位到火星文10位的映射,注意最大不超过169,说明火星文最大2位,使用Unit和Decade分别保存火星个位和十位与10进制的个位和十位的映射.记得初始化!!!!!,使用字符串接受输入的数字(读一行),然后判断s[0]是否是数字,如果是,就将该数字首先转化为13进制数...

PAT_甲级_1054 The Dominant Color

2020-11-05
阅读 1 分钟
1.2k
使用unordered_map<int,int> counts;统计每一个数字出现的次数,对于输入的每一个数字num,将counts[num]自增,按照道理来说是需要遍历counts获得出现半数最多的那个数字,但是经过测试发现,有且只有一个数字出现超过半数,所以在统计counts[num]直接判断是否已经超过半数,如果是就输出num结束程序即可。

PAT_甲级_1060 Are They Equal

2020-11-05
阅读 4 分钟
1.7k
给定两个位数不超过100的非负浮点数,如果保留n位有效数字的情况下写成0.@@@@*10^@的形式,如果两者相同,则输出YES和该数字,如果不同输出NO并且分别输出2个数。

PAT_甲级_1063 Set Similarity

2020-11-04
阅读 2 分钟
982
很自然就想到用set容器来保存数据元素了,最明显的特征就distinct,要求元素不重复的个数,我们首先使用unordered_set<int> sets[55]保存每个容器的所有元素(自动去重复了),然后编写函数caculate用来计算2个集合的并集和交集元素个数,就是遍历其中一个集合然后在另外一个集合使用find函数判断是否查找成功,如果是就...

PAT_甲级_1047 Student List for Course

2020-11-04
阅读 2 分钟
1.1k
该题和1039是姊妹题,思路其实是一样的,就是给定了一个正向的关系,现在需要建立一个反向的关系,这里是需要建立每一个课程与所有选择该门课程的学生。我们使用unordered_map<int,vector<string>> courseToStudents代表这个映射,所有的映射关系在输入的时候就可以建立(具体见代码),然后再输出所有的每一...

PAT_甲级_1039 Course List for Student

2020-11-04
阅读 2 分钟
1.1k
输入的时候给出的是每一个课程的编号与所有选择该们课程的学生的关系,我们现在只需要建立每一个学生与所有选择的课程的关系即可,这里使用unordered_map<string,set<int>> studentToCourses来存储每一个学生所选择所有的课程编号,这样在输入每一个课程course的学生student的时候就可以为每一个学生保存选...

PAT_甲级_1024 Palindromic Number

2020-11-03
阅读 2 分钟
1.1k
定义种操作:让一个条数加上这个整数首尾颠倒后的数字。例如对整数1257执行操作就是1257 + 7521 = 8778.* 现在给出一个正整数和操作次数限制,问在限定的操作次数内能是否能得到回文数。如果能得到,则输出那个回文数,并输出操作的次数;否则,输出最后一次操作得到的数字以及操作次数。

PAT_甲级_1023 Have Fun with Numbers

2020-11-03
阅读 2 分钟
1.3k
由于长度有可能达到20位,超过了long long的存储范围,所以这里采用string存储输入的整数。该题只需要解决两个问题,第一个就是如何判断2个整数的互为排列,第二个就是如何计算一个字符串与2的乘法。解决第一个问题的思路就是利用hash映射的思想,利用countOfS存储0~9数字出现的次数,在输入的时候做加法,对于输入的数...

PAT_甲级_1059 Prime Factors

2020-11-02
阅读 2 分钟
1.2k
此题考察的是质因子分解的内容,对于每一个质因子我们使用结构体Factor进行存储,其中保存了因子和出现的次数。接下来就是获取数字N的每一个质因子.

PAT_甲级_1096 Consecutive Factors

2020-11-02
阅读 2 分钟
1.2k
给出一个正整数N,求一段连续的整数, 使得N能被这段连续整数的乘积整除。如果有多个方案,输出连续整数个数最多的方案;如果还有多种方案,输出其中第一个数最小的方案。