PAT算法练习
文章平均质量分 97
主要是在刷pat中遇到的一些坑和思路解法
tbywt
码农
展开
-
2019.12.07考PAT的一些想法和总结
期末考试结束了,总结一下上次考的PAT,也就是2019/12/07的那一次。说起考PAT,是我以前的一个室友带着我一起考的,他想考浙大的研究生,我主要是想锻炼一下自己的能力,应付考研的机试,但不是考浙大。小结:这次考了80分,第一个HelloWorld没做,有点可惜,好像这次有一百五十几个满分的把,不知道是一个考场的还是全国的。第一次考心里有些紧张,其实做题的时候是有思路的,但是在考场上光调试...原创 2020-01-10 21:57:39 · 363 阅读 · 0 评论 -
PAT 甲级 1098 Insertion or Heap Sort
题意:给定一个原始序列和排序中途的序列,判断是插入排序还是堆排序;插入排序:插入排序分为两部分,前面一部分是排好序的一组,后面是没有排的,后面没有排的一定与原始对应位置的一模一样,我们只要找到后面没有排序的第一位然后与原始的对应位置的比较,然后对index+1进行排序就是答案;堆排序:堆排序分为两部分,第一个部分是初建堆,这个过程题目已经做了,第二个部分是调整,题目给出的序列也是调整过程中...原创 2019-11-16 00:00:39 · 91 阅读 · 0 评论 -
PAT 甲级 1036 A Delayed Palindrome
题意:给定一个初始值,判断是不是一个回文数,不是则进行按照题目给定的方式计算,若在10步以内计算了回文数,则输出,否则打印没找到。思路:首先就是判断是不是一个回文数,然后逐次进行计算,在10步内最后的和是否有是回文数的情况,否则打印没有。判断一个数是不是回文数,用string表示时,就看把它反转,看原先的数与反转的是否相等,相等则是回文数,否则不是。把两个数相加的时候,可以先用一个保存...原创 2019-11-23 13:27:25 · 89 阅读 · 0 评论 -
PAT 甲级 1040 Look-and-say Sequence
题意:给定一个初始值,然后给定一个第n次的数值,此题的意思是除第一个数外,当前的数是前一个数的描述,即数字+数字的个数思路:用s保存最终的结果,用t保存中间值,由于此题是一个变化的串,应当使用string,从当前第i个字符开始,往后遍历,找到第一个与第i个不相等的字符的下标j,然后然后把对应的数字和其个数拼接起来,用的是:值*10+个数的形式,转化为字符串即是数字和对应的个数。代码:...原创 2019-11-22 17:11:49 · 86 阅读 · 0 评论 -
PAT 甲级 1145 Hashing - Average Search Time
题意:给定一个序列,使用hash函数将该序列插入给定的数组中去,使用平方探测解决冲突,平方探测是逐次正向增加的,最后让求给定的序列的平均查找长度。对于无法插入的要打印该数无法插入思路:按照给定的hash函数建立hash表,然后对给定数进行查找。对于建立hash表和查找时长度要tsize,书上面说的是tsize/2,但是到这里必须要tsize,否则有几个点会通不过,具体原因网上说的也很含糊,这里...原创 2019-11-21 13:12:38 · 117 阅读 · 0 评论 -
PAT 甲级 1108 Finding Average
题意:给定一些字符串,判断是否是满足条件的浮点数,如果是则求其平均值,否则打印不是合法浮点数。思路:主要是两个类似于函数的用法。sscanf(a,"%lf",&temp);//按照指定的格式将a转化之后复制给temp,sprintf(b,"%.2lf",temp);//按照指定的格式格式化temp后复制给b代码:#include<iostream>#in...原创 2019-11-27 18:59:33 · 97 阅读 · 0 评论 -
PAT 甲级 1112 Stucked Keyboard
题意:给定一串字符,当电脑中的键盘有坏的时候,按下一个时,会打印出n个相同的字符出来,求坏掉的键以及原始的字符串是什么。思路:用一个map保存坏掉的键,用set集合保存已经打印了的字符,pre保存的是上一个字符,可能出现s为空的情况,所以pre先置为#,s也置为#,保证为空的时候不出错。先找出所有可能坏掉的键,然后把所有坏掉的键都置为false,更新map中的信息,然后输出坏键且未被打印的键,...原创 2019-11-26 19:15:44 · 82 阅读 · 0 评论 -
PAT 甲级 1107 Social Clusters
题意:每个人可能有多种爱好,把有相同爱好的人归为一类人,认为他们属于一个social cluster,求有多少个这样的集群,以及每个集群的人数思路:用一个v数组保存喜欢该爱好的人,然后把该爱好的人全部并起来,形成一个集群,数组的元素的如果是负数且访问过了那么绝对值代表集群的人数代码:#include<iostream>#include<vector>#in...原创 2019-11-14 23:01:36 · 141 阅读 · 0 评论 -
PAT 甲级 1114 Family Property
题意:此题给定一些人,然后给出一些人的相关信息,求出总的家族有多少个,以及每个家族的最小id以及家族的人数,平均财产,平均面积;思路:此处要输出家族中id最小的那个,在我们归并的时候,要把id大的子树并到id小的根上面去,这样就能保证树根是最小的id了,这里也是一个比较有技巧性的一个点,再有就是计算人的个数的时候要定义一个访问数组,用于计算家族中的人数用的代码:#include<...原创 2019-11-14 20:45:31 · 102 阅读 · 0 评论 -
PAT 甲级 1118 Birds in Forest
题意:给定一些照片,照片上面有一些树,树上有一些小鸟,判断最大的数的颗树可能有多少棵以及鸟有多少只;思路:此题主要考察并查集,用一个数组保存信息,下标为节点的数据,值为节点的父节点,用一个访问数组标识该节点是否遍历到过,用于计算多少只,最后数组中访问过的节点而且值为负表示为根节点,根节点有多少个表示数就有多少棵;如果并查集的概念不是很清楚的,建议先去看看并查集的概念,推荐看姥姥的mooc视...原创 2019-11-13 22:35:48 · 143 阅读 · 0 评论 -
PAT 甲级 1067 Sort with Swap(0, i)
题意:给定一组数,数据是从0-N-1,对其进行排序,但是每次交换只能与0进行交换,求最后排好序之后所需的次数。思路:1.依次输入数据,a数组保存每个数据所在的下标,由于数据是从0-N-1的,而且下标也是从0-N-1,所以直接可以使用下标表示数据,2.依次从1开始遍历,0要放的标志位,用于与其他数字交换,从而达到排序。遍历的时候如果i!=a[i],表示数据不在对应的位置,要用标志位去进行...原创 2019-12-03 18:15:45 · 146 阅读 · 0 评论 -
PAT 甲级 1080 Graduate Admission
题意:给定一些学生的信息和一些学校的录取信息,然后每个学校按照等级排名录取学生,按照每个学生的志愿选择学校,当学校名额有多余的时候,直接录取,如果没有多余但是当前学生的等级和它录取的最后相同时也会录取,如果到最后都没有学校录取它则将会落榜,最后打印每个学校录取学生的id,按照从小到大的顺序打印。思路:首先按照要求排序,遍历每个学生的志愿,看学校是否还有名额,或者是它的等级与志愿学校录取的最后一...原创 2019-12-03 21:08:08 · 98 阅读 · 0 评论 -
PAT 甲级 1082 Read Number in Chinese
题意:给定一个自然数,然后按照中国式的读法进行输出思路:首先判断是否为0的情况,其次判断是否为负,如是打印Fu,将其置为正,然后对该数字进行划分,四位为一组,分别为亿位上的四位,万位上的四位,个位上的四位,这四位处理的方式都是相同的。首先取出每位的下标,超过九的不做任何处理,否则获取当前该数,如果zero为true,则表名前面有”ling“要输出,继续往下,如果当前数不为0,如果是各位直接...原创 2019-12-03 19:23:46 · 81 阅读 · 0 评论 -
PAT 甲级 1071 Speech Patterns
题意:给定一段文字,判断文中最多的字母串有多少个思路:一开始想复杂了,其实就是把字母和数字构成的串连接起来,当碰到其他符号时,表示这个字符串已经结束,把这个字符串加入map集合中,最后对于大写的要换成小写的,还有就是对于最后一个的处理,当到达最后一个字符时,不管什么都要加入集合了。代码:#include<iostream>#include<string>#...原创 2019-12-03 12:32:41 · 179 阅读 · 0 评论 -
PAT 甲级 1068 Find More Coins
题意:小红想收集一定数额的金币,在给定的一些金币中,选择总的面额等于给定的面额,而且要求这个金币的面额是最小。思路:01背包思想,此题没有考虑另外一种变量的要求,只有金币限额的要求,对于当前面额的金币有两种情况,如果超过了当前的面额,则当前面额是等于i-1的面额的,如果当前面额小于总的所需面额,需要判断选择了当前面额的金币是否能达到最优解即max(dp[i-1],dp[i-1]+w[i]),对...原创 2019-12-03 11:51:25 · 94 阅读 · 0 评论 -
PAT 甲级 1070 Mooncake
题意:给定一些月饼的库存和总的销售额,问如何销售才能获得最大的利润思路:输入库存和总的销售额,然后算出每种月饼的单价,对每种月饼的单价进行从高到低排序,然后依次遍历每种月饼,求出最大销售额。代码:#include<iostream>#include<algorithm>#include<vector>using namespace std;...原创 2019-12-02 23:01:54 · 93 阅读 · 0 评论 -
PAT 甲级 1063 Set Similarity
题意:给定一些集合,然后求两个集合得similarity = nc/nt%,nc是两个集合中不重复的相同元素的个数,nt是两个集合中不同元素的总和,就是出去所有相同的集合内和两个集合之间的相同元素都去掉思路:用set集合保存元素,保证一开始集合中就没有相同元素,然后把对其中一个集合进行遍历,看此元素是否在另外一个集合中,(一开始的想法是把两个集合加入一个set集合,通过一定关系求出nc和nt,...原创 2019-12-02 22:35:29 · 119 阅读 · 0 评论 -
PAT 甲级 1060 Are They Equal
题意:给定两个数,按照给定的精度进行取舍,不必进行四舍五入,把后面的直接舍去,最后判断取舍后的数是否相同思路:先求出连个数的小数点的索引,然后求出第一位有效数字位的索引,比较两个索引之间的大小,cnt保存的就是最后取舍之后的指数,最后把a的n精度的数保存到A数组中,b也是保存在B中然后判断是否相等。在进行测试样例数据的时候,发现pat的数据都通不,但是能够AC,有点奇怪。代码:#in...原创 2019-12-02 21:51:39 · 95 阅读 · 0 评论 -
PAT 甲级 1062 Talent and Virtue
思路:给定一些人的id,德成绩,才成绩,对其进行排序,都高于H的为圣人,德高于H,才低于H而不低于L为君子,德和才都小于H但是大于L而且德大于才,为愚人,其余超过L的为小人。给这些人进行排序,君子排在圣人后面,愚人排在君子后面,小人排在愚人后面,上述四类人按照同样的排序方式排序,首先按照总分从大到小排序,不唯一则按照德大于才,还不唯一按照id从小到大排序,最后输出。思路:用4个vectorv保...原创 2019-12-02 19:42:10 · 164 阅读 · 0 评论 -
PAT 甲级 1069 The Black Hole of Numbers
题意:给定一个数字,将其进行一系列的运算,然后得到最终的结果为6174,表示结束注意点:1.必须是四位数,在运算之前如果不是四位数,要将其补0;2.必须是运算结果是6174,就算给定的数是6174,也要进行运算,所以说至少要进行一次运算,还有就是对于是否两个数相等的情况,两个数相等的时候,差值为0,也要打印,至少也要运算一次,3.每次运算的两个数和运算结果都要保证是4位数,结果也要...原创 2019-12-02 13:09:05 · 124 阅读 · 0 评论 -
PAT 甲级 1065 A+B and C (64bit)
题意:给定三个数,求前两个的和与第三个的大小。思路:对于前面两个数A,B,范围是long int,如果两个数是同正或者是同负都会发生溢出的情况,如果是AB同正而sum和为负表示溢出了,因为溢出了所以比C大,如果是两个负数而sum为正则发生了溢出,所以要打印false。代码:#include<iostream>typedef long long int LL;using...原创 2019-12-01 21:24:55 · 162 阅读 · 0 评论 -
PAT 甲级 1061 Dating
题意:给定四个字符串,把对应的字符串翻译成对应的约会时间,首先日期是一个大写字母在A-G之间表示星期一到星期日,小时是A-N大写字母或者是一个0-9的数字,而且星期和小时都是在第一个总产生,而且小时在星期之后产生,最后就是时间,时间是一个字母无论大写。注意:看清题意,这题在A-G或者是A-N之外的数据设了坑的,其实是一个比较简单的题目星期是7天,所以是A-G,而A-N是题目给出的代码:...原创 2019-12-01 20:53:38 · 84 阅读 · 0 评论 -
PAT 甲级 1059 Prime Factors
题意:给定一个long int类型的数,然后求其分解成质数的乘积形式思路:从第二个数开始循坏,只需要循环搭到根号num即可,首先判断是否是一个质数。然后在判断可以分解成多少个这样的质因子。最后打印。注意点:1.用一个bool类型的变量标识是否是第一次打印,用于判断是否打印*;2.有可能输入的数是一个1,所以对于1直接输出,在循环遍历的时候把1要排除;3.对于最后质数都已经找完了...原创 2019-12-01 16:42:39 · 73 阅读 · 0 评论 -
PAT 甲级 1058 A+B in Hogwarts
题意:给定两个数,按照其规则求其和。思路:首先把该数转化为Kuna,然后在算和,之后在算每个代码:#include<iostream>typedef long long int LL;using namespace std;int main() { LL firG = 0, firS = 0, firK = 0, secG = 0, secS = 0,secK =...原创 2019-12-01 15:29:13 · 102 阅读 · 0 评论 -
PAT 甲级 1073 Scientific Notation
题意:给定一个科学计数法的值,然后把这个值转化为原来的数打印输出。思路:首先找到进制E,然后提取出底数和指数部分,正负号可以根据原字符串的第一个判断,打印完之后在进行判断指数大于0是否,小于0表示要左移,左移表示要在原底数的基础上前面打印出打印出左移位数的0,然后把原底数的非小数点打印,如果是大于,则表示小数点要向右移动,但是有一个就是指数与小数的长度,如果小数的长度大于指数,则需要把小数点右...原创 2019-12-01 14:46:38 · 97 阅读 · 0 评论 -
PAT 甲级 1074 Reversing Linked List
题意:给定一个链表,然后按照给定个数进行逆置,最后输出结果,注意自己用的是v保存的所有有效的数据的地址,所以在逆置的次数是v.size()/k,而不是n/k.思路:输入所有的数据,然后从头节点开始遍历,把属于该链表的地址加入数组ans,最后把ans里面的地址按照k个一组进行逆置,最后打印结果代码:#include<iostream>#include<algor...原创 2019-12-01 10:25:27 · 79 阅读 · 0 评论 -
PAT 甲级 1075 PAT Judge
题意:给定一些学生提交pat的测试成绩,对每个学生的提交的成绩进行判断和计算,最后打印符合要求的学生的名次,学号,总分,每题的分数注意:对于所有未提交,以及提交了但是一题都没通过编译的,这样的数据不应该展示。思路:首先对每个学生每个题目的数量及初始值进行初始化,为了和提交的0分区分,初始化为-1,然后对每个题目的总分进行输入,这对后来用于判断满分的题数是有用的,在进行输入数据,对于每个学生...原创 2019-12-01 08:57:04 · 78 阅读 · 0 评论 -
PAT 甲级 1077 Kuchiguse
题意:给定n个字符串,然后求这些字符串相同后缀的长度思路:如果从每个字符串的结尾开始遍历的话,太过于复杂,将每个字符串逆置,然后与后面逆置的字符串从头开始比较,起点是0就比较容易,当输入一个字符串时,就与ans字符串比较,把相同的ans中的字符截取下来后赋值给ans,不用存储。当然可以直接存储之后,把所有的字符最短长度求出来,依次遍历每两个字符串,判断其每个字符是否相同,相同用ans连接起来。...原创 2019-11-30 21:35:04 · 104 阅读 · 1 评论 -
PAT 甲级 1078 Hashing
题意:给定一组数据,和一个数组的长度,然后将数据插入数组中取,如果数据插入成功,则返回数据的下标,否则打印-符号思路:首先判断其窗口值是否是一个质数,否则就找到最小的质数,然后根据hash函数算出要插入的位置,如果插入不成功,则使用二次方次探测解决冲突,如果无法插入,则打印-,第一个i=0是没有冲突,所以可以插入,直接判断i==1就可以判断是否打印空格代码:#include<i...原创 2019-11-30 20:53:45 · 78 阅读 · 0 评论 -
PAT 甲级 1081 Rational Sum
题意:给定几个有理数,求其有理数的和思路:循环输入每个有理数,把有理数相加后进行约分,每步做完运算后都要进行约分,防止溢出的情况,在输入的时候也可进行约分,尽可能的防止溢出,最后注意的是可能分子为0和整数部分也为0这种情况出现。代码:#include<iostream>using namespace std;typedef long long int LL;LL g...原创 2019-11-30 16:33:56 · 127 阅读 · 0 评论 -
PAT 甲级 1083 List Grades
题意:给定一些学生信息和最低的成绩和最高成绩,求出在最低成绩和最高成绩之间的学生信息。思路:首先输入所有的数据,然后对所有满足条件的信息用ans数组保存,最后排序后打印,由于分数不可能重复,直接更具排序即可。代码:#include<iostream>#include<algorithm>#include<vector>#include<...原创 2019-11-30 15:05:11 · 87 阅读 · 0 评论 -
PAT 甲级 1085 Perfect Sequence
题意:给定一系列的数字,对于这一系列的数字的某个字串中,假定最大的数为M,最小的数为m,参数p,满足M<=m*p,求这样字串中最长的字串有多少个思路:首先对该序列按从小到大的顺序排序,然后使用二重循环进行遍历看是否满足条件,遍历如果直接使用二重循环暴力解的话,倒数第二个点会超时,所以我们在内层循环中直接从i+result开始找起,即从上一次计算出来的长度开始,因为要找的是最长的序列,所以...原创 2019-11-30 12:44:58 · 104 阅读 · 0 评论 -
PAT 甲级 1088 Rational Arithmetic
题意:给定两个有理数,然后计算有理数的加减乘除的结果,但是要满足题目所给定的格式。思路:把+-*/=这几个符号单独拿出来打印,用一个函数对参加运算的数和结果进行化简打印。首先判断是否有0的存在,如果有,看是否是分母,分母则打印Inf,否则打印0返回,接着判断是否为异号,异号不要直接相乘判断符号,否则会发生溢出,如果是符号就要做打印括号的准备,将所有的数置为正数然后计算,因为前面已经将符号判断出...原创 2019-11-29 23:20:17 · 142 阅读 · 0 评论 -
PAT 甲级 1089 Insert or Merge
题意:给定两组数据,第一组是原始的数据,第二组某种排序方式中的一种,判断此方法是那种排序,然后给出排序的下一步骤。思路:先判断是不是插入排序,插入排序前面是非递减的,之后于原来的都是一样的,根据这个特性可以判断是那种排序,对于归并排序,不知道是不是能力不够,直接对其进行归并排序一直有错,所以改成了对a进行从头开始归并排序,当a与b一样后,排一边序就是结果了,也表示要退出排序了代码:#...原创 2019-11-29 21:37:16 · 94 阅读 · 0 评论 -
PAT 甲级 1093 Count PAT's
题意:给定一个字符串,数总的PAT的个数有多少个。思路:对于A字符而言,A前面P的个数和A后面T的个数的乘积便是该由该A所能构成的pat的个数,把每个由A组成的PAT个数总和加起来,便是所有的PAT个数。代码:#include<iostream>#include<string>using namespace std;int main() { strin...原创 2019-11-29 20:02:17 · 149 阅读 · 0 评论 -
PAT 甲级 1095 Cars on Campus
题意:车辆可以在大学里面停放车辆,先给定一些车辆进出的信息,只有进入和出去匹配成功了才算,如果有多次in时,取进入的最后一次,多次out时取最前面一个,也就是说in要匹配下一个紧挨时间的out才算一次匹配成功,然后k次查询,查询在某个时间点的车辆数目,然后停留的最长时间以及相对应的车牌号码。时间最好换算为计算比较好。思路:首先把信息全部存放到结构体数组中,然后根据先排id在排time的原则,把...原创 2019-11-29 19:34:57 · 171 阅读 · 0 评论 -
PAT 甲级 1096 Consecutive Factors
题意:给定一个数字,其可以分解为几个因子的乘积,这些因子中可能存在连续的因子,求这样的连续因子个数以及最小的连续因子序列。思路:参考的柳神的blog,从2开始遍历,最大不超过sqrt(n)+1,依次取其连续的乘积,如果满足乘积是n的因子,则继续向后取积,最后当积不能够整除n了,就退出,检查长度是否大于len,是更新len,且保留第一个数。最后打印,注意如果该数是一个质数的时候,只打印其本身,1...原创 2019-11-29 16:05:13 · 116 阅读 · 0 评论 -
PAT 甲级 1100 Mars Numbers
题意:给定一些火星语和地球语言,然后分别进行相应的转化最后打印结果思路:用一个string的数组保存地球语言对应的进位与各位,方便查询,火星语言可能有一个可能有两个,所以要判断其长度是否大于4,最大的地球数不超过168,所以当把地球语言转化为火星语言的时候最多只可能有两个。if (t / 13) cout << b[t / 13];//如果有进位就打印进位,if ((t /...原创 2019-11-28 22:44:42 · 115 阅读 · 0 评论 -
PAT 甲级 1101 Quick Sort
题意:给定一组数,判断当前数是否满足条件,即左边的全部比此数小,右边的全部比此数大。最后打印这样的数的个数,和数字思路:如果直接按题目给定的方法判断直接超时,可以用比较简单的思路:把输入的数重新按从小到大的顺序排序,于原来的副本进行比较,如果该数字的索引变了即表示有小于或大于它的数使其改变索引,如果左边数全部小于当前数,右边全部大于当前数,则索引不会改变。max表示当前数的前面一个数,表示左边...原创 2019-11-28 20:48:33 · 125 阅读 · 0 评论 -
PAT 甲级 1104 Sum of Number Segments
题意:给定一组数据,求该数据每个片段的总和,每个片段是连着的,不会跳着算;思路:此题参考柳神的,感觉是一种排列组合的思想,就是输入一个数字后,p和q是片段的首位指针,p属于1-i内和q属于i-n中,pq都是包含该数字的片段,对于1-i和i-n内,共有i*(n-i+)中包含该数字片段的组合,所以最后和中有包含多个数字的和代码:#include<iostream>#incl...原创 2019-11-28 20:14:28 · 88 阅读 · 0 评论