![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT
Ethan Wilson
这个作者很懒,什么都没留下…
展开
-
PAT Counting Leaves C++ 44行
https://pintia.cn/problem-sets/994805342720868352/problems/994805521431773184思路可用层序遍历 用leafcnt数组 根据层号记录叶子数AC代码#include <iostream>#include <vector>#include <queue>using namespace std;struct { int layer; vector<int> child;}原创 2020-07-28 12:32:14 · 114 阅读 · 0 评论 -
PAT Lowest Price in Supply Chain 测试点3.7. C++ 38行
https://pintia.cn/problem-sets/994805342720868352/problems/994805362341822464思路深度遍历 遇到叶子结点就判断价格是否比当前最低价格低就行了测试点3、7:最低价格lowprice的初始数字设置的小了其他:float改成doubleAC代码#include <iostream>#include <vector>#include <queue>#include <cmath&原创 2020-07-28 12:25:08 · 115 阅读 · 0 评论 -
PAT The Largest Generation C++ 43行
https://pintia.cn/problem-sets/994805342720868352/problems/994805372601090048思路静态数即可 可用层序遍历 初始化一个laycnt数组记录每层的结点数 每访问一个结点 就++laycnt[当前层]AC代码#include <iostream>#include <vector>#include <queue>using namespace std;struct NODE { int原创 2020-07-26 12:45:00 · 85 阅读 · 0 评论 -
PAT Highest Price in Supply Chain C++ 39行
https://pintia.cn/problem-sets/994805342720868352/problems/994805376476626944思路其实就是求叶子结点的最大深度 用深度优先即可 可用静态树 孩子用动态数组AC代码#include <iostream>#include <vector>#include <queue>using namespace std;struct NODE { double price; vector<原创 2020-07-26 12:16:08 · 82 阅读 · 0 评论 -
PAT Total Sales of Supply Chain 测试点2356 C++ 2种方案 34/42行
https://pintia.cn/problem-sets/994805342720868352/problems/994805388447170560思路只有到了叶子结点处才计算售价,深度或广度遍历都可以。深度遍历可以用当前层号计算价格,也可以用当前层价格计算;广度就是层序遍历测试点2356:float改用doubleAC代码含深度和广度两种方案#include <iostream>#include <vector>#include <queue>原创 2020-07-21 12:56:18 · 464 阅读 · 0 评论 -
PAT A+B和C C语言 11行
https://pintia.cn/problem-sets/994805260223102976/problems/994805312417021952思路int不够长 要用long#include <stdio.h>int main(){ int n; long a,b,c; scanf("%d",&n); for (int i=0; i<n; i++){ scanf("%ld %ld %ld",&a,&b,&c); print原创 2020-06-27 12:50:42 · 155 阅读 · 1 评论 -
PAT sharing 附测试点3解决办法 C++ 35行
https://pintia.cn/problem-sets/994805342720868352/problems/994805460652113920思路用vector建立这2个静态链表,从后往前遍历,遇到不是重复的结点就停测试点3遍历的时候不要采取“长的先走,再一起走”这种从前开始遍历的方法,会段错误#include <iostream>#include <vector>using namespace std;typedef struct { int adr,原创 2020-06-27 12:37:27 · 229 阅读 · 0 评论 -
PAT反转链表 附测试点3-6 C++ 36行
https://pintia.cn/problem-sets/994805260223102976/problems/994805296180871168思路先用结点数组arr[100000]存储结点,再用shunxu向量按顺序插入结点,以防有多余结点,反转时用另一个fanzhuan向量从shunxu里挑选插入测试点3-5:有多余向量,反转时的循环结束边界应该是shunxu的size,而不是n6:插入剩下的没反转的结点时的边界也犯了上述错误AC代码#include <iostream&g原创 2020-06-21 13:08:15 · 262 阅读 · 0 评论 -
PAT卖个萌 附测试点1 C++ 37行
https://pintia.cn/problem-sets/994805260223102976/problems/994805273883951104思路由于不知道每种表情有多少,只能先读入一整行,在根据左右括号进行分割,用string的substr提取表情,插入vector。只有遇到左右括号才开始处理(flag控制),其他字符无视测试点1输入的序号可能小于1AC代码#include <iostream>#include <vector>using namespa原创 2020-06-19 13:01:24 · 137 阅读 · 0 评论 -
PAT 解码PAT准考证 测试点0 1 4 C++ 81行
https://pintia.cn/problem-sets/994805260223102976/problems/1071786104348536832思路其实就是分别实现3个功能用switch分隔,单个功能都不难,用map很容易实现,主要是时间限制,用scanf和printf,别用cin和cout,并且在一开始输入数据的时候就分好类,否则会超时。由于map不能排序,所以凡是需要排序的地方均用一个vector做一个副本,对vector排序。另外,好像类型1、3没有找不到的样例,所以没加if判断原创 2020-06-17 13:11:39 · 200 阅读 · 0 评论 -
PAT谷歌的招聘 测试点2 4 C++ 28行
https://pintia.cn/problem-sets/994805260223102976/problems/1071785997033074688思路用string的substr和stoi挨个转化成int型数字判断是否为素数即可,题目的片段最多为9位,在int范围内测试点2:就像题目说的,0023的情况要输出0023而不是23,所以直接输出substr即可;4:整体长度小于片段长度则直接输出404(string,size()是无符号数,如果减出负数,会变得很大,需要用int转换一下)A原创 2020-06-15 12:52:59 · 732 阅读 · 0 评论 -
PAT 字符串A+B C语言 10行
https://pintia.cn/problem-sets/994805260223102976/problems/1071785884776722432思路只要没接收到EOF就一直边判断边输出即可,途中跳过换行AC代码#include <stdio.h>int main(){ int asc[128]= {0} , cnt=0; char c; while ((c=getchar())!=EOF) if (asc[c]==0 && c!='\n') {原创 2020-06-12 12:57:41 · 119 阅读 · 0 评论 -
PAT多选题常见计分法 思路及代码 C++
https://pintia.cn/problem-sets/994805260223102976/problems/994805263624683520思路大体思路跟 选择题一样,关键在于得一半分数和错误选项的处理:得一半分数一定是少选的情况;答案有但回答里没有 和 答案没有但回答里有 都算选错,都应该统计次数。答错的情况下,可以采取这样的处理:将正确答案的选项从学生回答里剔除,途中遇到正确答案里有但学生回答里没有,则统计错误次数;如果剔除完,学生回答空了,则说明是少选了,得半分,否则原创 2020-06-11 12:13:29 · 290 阅读 · 0 评论 -
PAT 选择题 思路及代码 C++ 57行
https://pintia.cn/problem-sets/994805260223102976/problems/994805270356541440思路来自于https://blog.csdn.net/liuchuo/article/details/52510582正确选项的数组跟每道题分数的数组分开记录,既然是全都答对才有分,可以用set存储每道题的答案,学生的答案也用set存储,那么得分的条件就是两个set相等(set可以用“==”判断);题目错误次数也可以用单独的数组存储。注意的点原创 2020-06-09 13:00:28 · 269 阅读 · 0 评论 -
PAT危险品装箱 测试点2 3 C++ 31行
https://pintia.cn/problem-sets/994805260223102976/problems/1038429484026175488思路用map<int,vector>建立<物品编号>到<与这个物品不相容的所有物品的变长数组>的映射,第二轮输入时,边输入变判断,如果一个物品还没输入过,就在cargo里增加该物品以及该物品的所有不相容物品,这样接下来如果有不相容的物品编号输入就能查到了,flag记录有没有查到不相容flag=0代表查到了测试点2原创 2020-06-07 13:09:37 · 264 阅读 · 0 评论 -
PAT单位排行 C++ 58行
https://pintia.cn/problem-sets/994805260223102976/problems/994805260353126400思路用map建立学校名到编号的映射 编号对应向量组的下标 每次读入学校时 在map里查不到就在map和vector里各新增一个#include <iostream>#include <map>#include <vector>#include <algorithm> //transform原创 2020-06-05 12:15:35 · 97 阅读 · 0 评论 -
PAT-MOOC期终成绩 2种思路 测试点3可能的情况 C++ 56/46行
https://pintia.cn/problem-sets/994805260223102976/problems/994805261493977088思路11、用学生结构体STU记录三科分数和总分数,结构体定义时在内部初始化三科成绩为-1;2、既然输入的学号是乱序,显然得用map建立学号和分数的关系,我用的是map<string,STU>,以此依次读入三部分数据。由于编程成绩小于200的就不及格,所以在读入的时候可先判断,小于200的直接不录入,节省时间;3、成绩都进入map之后,m原创 2020-06-02 12:55:04 · 258 阅读 · 0 评论 -
PAT链表元素分类 附测试点4 C++ 34行
https://pintia.cn/problem-sets/994805260223102976/problems/994805262953594880思路用结点数组记录每个结点,再根据头结点地址依次加入向量1,完成后再判断数据大小依次加入向量2,输出时结点的next就输出下一个结点的地址,最后一个结点单独输出就行了。测试点4存在孤立结点。解决办法:加入向量1时从头结点开始根据next遍历,且在加入向量2的判断中,实际参与判断的结点数要以向量1的大小为准,而不是一开始输入的个数AC代码#inc原创 2020-05-30 13:08:25 · 150 阅读 · 0 评论 -
PAT-螺旋矩阵 测试点1.3.7. C++ 38行
https://pintia.cn/problem-sets/994805260223102976/problems/994805275146436608测试点1 3 7见https://blog.csdn.net/qq_39117553/article/details/105164875思路直接输出可不好输出,就先申请空的二维数组往里面填数吧,顺时针一圈圈的填#include <iostream>#include <algorithm>#include <cma原创 2020-05-22 13:05:59 · 104 阅读 · 0 评论 -
PAT-A除以B 附测试点2 C语言 17行
https://pintia.cn/problem-sets/994805260223102976/problems/994805305181847552思路模拟手算过程,最后注意商数开头的0不能输出;因为除数是1位数 ,所以开头最多有1个0, 如果商为多位且开头是1,则下标从1开始输出。注:商数数组至少保留一位(测试点2,如2/7 要输出0 2)#include <stdio.h>#include <string.h>int main(){ char a[1001原创 2020-05-17 12:19:08 · 171 阅读 · 0 评论 -
PAT数素数 2种方法 C语言 28/29行
https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112思路1 朴素判断例如,要输出第5-27个素数,先找到第4个素数,重置计数器,再输出;#include <stdio.h>int isprime(int a){ for (int i=2; i*i<=a; ++i) if (a%i==0) return 0; return 1;}int main(){ int原创 2020-05-16 12:57:17 · 362 阅读 · 0 评论 -
PAT素数对猜想 C语言 18行
https://pintia.cn/problem-sets/994805260223102976/problems/994805317546655744思路从4开始 判断i跟i-2是否都是素数即可注:素数是从2开始 1不算#include <stdio.h>#include <math.h>int isprime(int a){ for (int i=2; i<=sqrt(a); ++i) //判断素数 截止到平方根即可 if (a%i==0) re原创 2020-05-16 12:03:21 · 196 阅读 · 0 评论 -
PAT有理数四则运算 c++ 78行
https://pintia.cn/problem-sets/994805260223102976/problems/994805287624491008算法笔记的答案采用分数结构体 定义化简以及加减乘除的操作#include <cstdio>#include <algorithm> //abs()using namespace std;typedef long long ll;struct fraction { ll up,down;}a,b;ll gcd原创 2020-05-15 12:47:21 · 202 阅读 · 0 评论 -
PAT-数字黑洞 测试点2345解决办法 C++ 22/40行
https://pintia.cn/problem-sets/994805260223102976/problems/994805302786899968思路用字符串接收输入,排序,用stoi函数转成数字,得到的结果再用to_string函数转回字符串,循环判断即可。测试点2.3.4:输入不是4位数,输入1,2,3位时需要在前面补0。–测试点2计算过程中也可能得到非4位数,所以补0的操作要放到循环里面。如输入:9998应输出:9998 - 8999 = 09999990 - 0999原创 2020-05-13 12:53:52 · 246 阅读 · 1 评论 -
PAT我要通过 测试点0·1·4·5 C/C++ 36/38行
https://pintia.cn/problem-sets/994805260223102976/problems/994805323154440192思路条件1:遇见其他字符就可以判断不符合了;条件2:PT中间至少要有1个A;条件3:在条件2的基础上递归定义,每递归一次,中间多1个A,右边多一个左边,可得左边A的数量*中间A的数量=右边A的数量。测试点1:应该是不符合题意的其他情况,判断时只需要判断符合的情况即可,其他情况一律else处理;测试点5:有多个P或T。附:算法笔记给的几个样例原创 2020-05-12 12:43:49 · 355 阅读 · 0 评论 -
PAT-月饼 C++ 33行
https://pintia.cn/problem-sets/994805260223102976/problems/994805301562163200思路用月饼结构体记录数量和价格,输入总价的时候顺便计算单价覆盖掉总价,最后以单价降序排列按需求计算即可。#include <stdio.h>#include <algorithm>using namespace ...原创 2020-05-05 18:44:24 · 170 阅读 · 0 评论 -
PAT-组个最小数 C语言 18行
https://pintia.cn/problem-sets/994805260223102976/problems/994805298269634560思路先选个最小的输出,再把全部的0输出,接着从小到大依次输出#include <stdio.h>int main(){ int a[10]= {0}; for (int i=0; i<10; i++) scan...原创 2020-05-05 18:20:12 · 203 阅读 · 0 评论 -
PAT继续3n+1猜想 测试点3 4 C++ 29行
https://pintia.cn/problem-sets/994805260223102976/problems/994805320306507776思路计数(散列)法,将得到过的数字计数,再把输入的数组排序,最后按从大到小的顺序遍历检查散列,如果=0则说明没被覆盖;由于不知道有多少个要输出的数,所以就用一个flag,从第二次开始输出空格即可;散列数组开大一点避免段错误#includ...原创 2020-05-03 12:26:18 · 365 阅读 · 0 评论 -
PAT-编程团体赛 C语言 16行
https://pintia.cn/problem-sets/994805260223102976/problems/994805277163896832思路计数法,让队伍编号做分数数组下标,数组记录分数,边输入边判断;队员编号没用#include <stdio.h>int main(){ int n,teamnum,temp,score,maxscore=-1,k; /...原创 2020-05-02 12:48:58 · 210 阅读 · 0 评论 -
PAT-字符统计 C语言 16行
https://pintia.cn/problem-sets/994805260223102976/problems/994805280817135616思路计数法,遇到字母就统计,大写的话就转成小写字母统计,否则直接统计。用ctype里的函数比较方便#include <stdio.h>#include <ctype.h>int main(){ int asc...原创 2020-05-01 22:27:23 · 179 阅读 · 0 评论 -
PAT-到底买不买 附测试点2解决办法 C语言 20行
https://pintia.cn/problem-sets/994805260223102976/problems/994805283241443328思路还是计数法,先统计有的,减去想要的,减到负数说明缺了,这时统计缺的数量。最后如果缺的数量大于0就输出NO,否则YES;测试点2解决办法:不用fgets。(不知道什么原理)#include <stdio.h>#includ...原创 2020-04-30 13:18:58 · 230 阅读 · 0 评论 -
PAT-统计同成绩学生 C语言 18行
https://pintia.cn/problem-sets/994805260223102976/problems/994805284092887040思路典型的计数排序题,用分数数组记录成绩个数即可;cin cout会超时#include <stdio.h>int main(){ int temp,n; scanf("%d",&n); int score[...原创 2020-04-30 12:35:13 · 135 阅读 · 0 评论 -
PAT-旧键盘打字 附测试点2/5 C++ 25行
https://pintia.cn/problem-sets/994805260223102976/problems/994805288530460672思路跟 旧键盘.那题类似,也是用计数法,用asc数组保存坏掉的键,再用应输出字符串去扫描。测试点2:可能没有坏键,即输入的是空字符串,所以不能用cin或scanf("%s"),C语言就用fgets(),C++就用cin.getline或者g...原创 2020-04-28 13:17:10 · 216 阅读 · 0 评论 -
PAT-德才论 向量和排序的使用 C++ 35行
https://pintia.cn/problem-sets/994805260223102976/problems/994805307551629312思路用结构体向量数组,边判断边分类;由于考号就8位,所以用int足矣;最后用sort排序,每排完一个就输出;合格人数用4个向量的大小相加即可,不需要额外变量;用cin cout会超时。代码#include <iostream...原创 2020-04-26 12:32:33 · 106 阅读 · 0 评论 -
PAT-数字加密 C++ 22行
https://pintia.cn/problem-sets/994805260223102976/problems/994805276438282240思路先在短的那个字符串前面填0使两个字符串长度相同,再加密;mod13的全部结果可以用一个单独的字符串存#include <iostream>using namespace std;int main(){ string ...原创 2020-04-25 13:12:35 · 239 阅读 · 0 评论 -
PAT说反话 C语言 13行
https://pintia.cn/problem-sets/994805260223102976/problems/994805314941992960思路利用scanf("%s",XX)会跳过空格的特性,来循环读取输入,存到二维char数组里,用EOF判断结束,最后倒着输出即可代码#include <stdio.h>int main (){ char words...原创 2020-04-22 13:13:00 · 186 阅读 · 0 评论 -
PAT-写出这个数 C语言 18行
https://pintia.cn/problem-sets/994805260223102976/problems/994805324509200384思路字符串读入,循环求和,再把和转化成字符串(sprintf()函数,to_string()函数等),依靠字典输出每位对应的拼音代码#include <stdio.h>#include <string.h>in...原创 2020-04-22 12:39:49 · 262 阅读 · 2 评论 -
PAT-查验身份证 C语言 23行
https://pintia.cn/problem-sets/994805260223102976/problems/994805290334011392如果只是为了通过测试,则不需要判断前17位是否出现非数字,直接算进权值即可,这样可以少写一两行,看起来更简洁。实际应用中可以加入判断来提高效率。#include<stdio.h>int main(){ int n,sum,f...原创 2020-04-21 12:51:04 · 307 阅读 · 1 评论 -
PAT-个位数统计 C语言 13行
https://pintia.cn/problem-sets/994805260223102976/problems/994805300404535296字符串格式读入,用计数法统计#include<stdio.h>#include<string.h>int main() { char num[1001]; scanf("%s",num); ...原创 2020-04-20 12:57:09 · 231 阅读 · 0 评论 -
PAT-D进制的A+B C/C++ 两种转换策略 15行
https://pintia.cn/problem-sets/994805260223102976/problems/994805299301433344首先,由于A和B最大有30位,如果是转换成二进制,结果最大能有31位,所以即使用long long(最多只有20位数) 存储结果也可能溢出,只能用数组或字符串;其次是注意和为0时应输出0。测试用例:1073741823 1073741823...原创 2020-04-18 12:54:18 · 305 阅读 · 0 评论