
PAT官网练习题
寒泉Hq
当你试图解决一个你不理解的问题时,复杂化就产生了
展开
-
【算法笔记】重刷PAT 题解合集
乙级1001#include<iostream>using namespace std;int main() { int n; cin >> n; int cnt = 0; while (n != 1) { cnt++; if (n % 2 == 0) {//偶数 n /= 2; }else {//奇数 n = (3 * n + 1) ...原创 2019-09-22 22:05:44 · 22278 阅读 · 0 评论 -
【PAT甲级 排序】1096 Consecutive Factors (20 分) C++ 全部AC
题目难倒是不难,暴力破解即可。我还想出来一种O(n)的算法,写着写着自己把自己绕进去了,但是理论上应该可行(就是找最大连续子序列和的那个思想)OJ上浮点错误应该考虑程序中:是否可能出现了一个数除以0的情况是否可能出现了一个数取余0的情况是否发生了数据溢出而导致的除以0或者取余0的情况#include<iostream>#include<math.h>us...原创 2019-08-27 11:38:38 · 21299 阅读 · 0 评论 -
【PAT甲级 排序】1012 The Best Rank (25 分) C++ 全部AC
题目中规中矩的一道题。不太容易理解,但是理解之后写起来挺流畅的,没什么坑。解题思路:题目会给出所有学生所有科目的成绩、想要看分学生的学号。我们要先给这些学生单科成绩排序,算出它们的单科排名,存在Stu中再依次输出想要看分的学生的最好成绩(最好成绩的学科 最好成绩的排名)。如果学号不存在,就输出N/A题解 C++#include<iostream>#include...原创 2019-08-26 22:17:53 · 21196 阅读 · 0 评论 -
【PAT甲级 多项式相乘】1009 Product of Polynomials (25 分) C++ 全部AC
题目思路维护三个数组:arrA[1001]存储第一行数据arrB[1001]存储第二行数据c[1000000]存储计算结果数组下标表示多项式的指数,数组存的内容表示多项式的系数将arrA[1001]的每个数分别与arrB[1001]中的每个数相乘,将结果放在c数组的两个下标相加的的位置(与c数组的原数相加),最后得到的c数组就是结果多项式。然后按照题目要求的格式输出即可。...原创 2019-08-25 22:20:21 · 21145 阅读 · 0 评论 -
【PAT甲级 最长公共子串】1007 Maximum Subsequence Sum (25 分) C++ 全部AC
题目读题!读题!题上让输出最长子串起始位置和终止位置的数字,而不是角标如果每个数都是负数,则输出0不要看着测试用例去猜题意,要先把题完整看完了再开始码!如果自己的测试用例全都通过了,题目的测试用例几乎都没通过,不要怀疑,一定是理解错题意了!再看一遍题。。。题解C++#include<iostream>using namespace std;//最长公共子串问题...原创 2019-08-25 21:36:05 · 21129 阅读 · 0 评论 -
【PAT甲级 排序】1036 Boys vs Girls (25 分) C++
题目是个水题,排序就完事。输出女生最高分的学生,男生最低分的学生,并计算分差。一点点小坑:让输出啥,看清楚再写,不要靠记忆做题一开始把题目中要求输出的NA看成了NAN,一开始有两个测试用例过不去,不过瞬间就发现了这个错误。改过来就就好了。题解 C++#include<iostream>#include<string>#include<algori...原创 2019-08-16 11:16:47 · 21284 阅读 · 0 评论 -
【PAT甲级 LinkedHashMap】1041 Be Unique (20 分) Java、C++版
题目题目的意思是,找到第一个不重复的元素。输出它。用Java试了好多种方法都超时。我怀疑这道题不能用Java做…AC题解:C++版用Java尝试了各种方式,都是后两个测试点过不去,只好换C++这个算法挺巧妙的,注意记录输入顺序的方式#include <iostream>using namespace std;int main(){ int num[100001]...原创 2019-08-07 20:28:53 · 21119 阅读 · 0 评论 -
【PAT甲级 替换指定字符】1035 Password (20 分) Java版 4/4通过
题目这个题挺简单,意思就是把所有的1替换成@,0替换成%等等读题要仔细,输出格式方面有几个小坑:末尾不要有多余的空格、换行如果替换了,要在第一行输出替换的条数如果没替换,要把题目给的字符串拼接一下,要输出N的实际值,而不是仅输出N题解import java.util.Scanner;public class Main { public static void main(...原创 2019-08-07 18:41:02 · 21025 阅读 · 0 评论 -
【PAT甲级 一个字符数组是否被另一个包含】1092 To Buy or Not to Buy (20 分) C++
题目给两个字符串,一个是卖的,一个是想买的。你需要统计一下,看是不是卖的包含想买的。如果包含,则YES,并输出多余的个数。如果不包含,则No,并输出缺少的个数。思路维护两个数组,分别是已经有的数量have[]、想要的数量want[]。数组的大小 等于面包的个数数组下标 表示面包的颜色数组中存放的数 表示面包的数量计算差值,判断是否购买即可题解 C++#inclu...原创 2019-08-09 18:53:41 · 20960 阅读 · 0 评论 -
【PAT甲级 找到出现次数过半的数字】1054 The Dominant Color (20 分) C++
题目思路用数组模拟维护一个栈,栈内存储的数据有两个属性:数字、数量。读取数字,如果数字已存在,相应位置上的数量+1如果数字不存在,新建这个数字,size++,相应位置上的数量设置为1题解 C++#include<iostream>#include<string>#include<algorithm>#define NUM 480000u...原创 2019-08-09 18:19:18 · 21166 阅读 · 0 评论 -
【PAT甲级 删除字符串中的指定字符】1050 String Subtraction (20 分) C++
题目删除字符串中的另一个字符串包含的所有字符。可以通过判断两个字符串是否为空,来稍微优化一下运行速度题解C++#include<iostream>#include<string>#include<algorithm>using namespace std;int main() { string str1, str2; // 优化执行效率...原创 2019-08-09 15:01:07 · 21016 阅读 · 0 评论 -
用Java刷OJ超时怎么办?原因分析及解决方式
Java超时原因?又是Java超时。PAT不给Java延时,简直欺负Java选手。因为Java本身底层的一些原因,编译、运行起来会比其他语言慢一些。有很多其他OJ都放宽Java时间限制了。那为啥PAT不放宽Java时间限制?也可能是因为JDK提供的现成的方法太多、容易偷懒,而语言只是工具,重要的是算法。可能PAT希望考试更加公平,避免因为语言不同而造成的便捷,避免大家因为过多的依赖语言的特性,而忽略了算法设计的重要性。毕竟,如果已有JDK写好的方法的话,就不用重复造轮子了。原创 2019-08-09 12:40:19 · 27024 阅读 · 2 评论 -
【PAT甲级 U形打印】1031 Hello World for U (20 分) Java版 6/6通过
题目一开始没看懂“as squared as possible”和那个max不等式到底是什么意思,看了别人的解答才明白:如果n % 3 == 0,n正好被3整除,直接n1 = n2 = n3如果n % 3 == 1,因为n2要比n1大,所以把多出来的那1个给n2如果n % 3 == 2,就把多出来的那2个给n2题解import java.util.Scanner;public...原创 2019-08-07 09:53:06 · 19118 阅读 · 0 评论 -
【PAT甲级 十进制转十三进制】1027 Colors in Mars (20 分) Java版 5/5通过
题目是个水题,一次通过。这道题的大意就是:给你输入3个十进制的数,让你转换成3个十三进制数。在转换的时候,注意不足两位的要用0补全两位。小坑提交之前,想起来自查一下我的convert(int n)进制转换函数。于是写了个循环,把0-200范围内的13进制的数,挨个输出检查了一下,才想起来空位要补0。另外,StringBuilder真的好用~代码import java.util.S...原创 2019-08-06 23:35:38 · 19238 阅读 · 0 评论 -
【PAT甲级 BigInteger】1019 General Palindromic Number (20 分) Java版 7/7通过
题目这题用Java的BigInteger做,可以操作任意长度的数字,感觉有一点取巧了。如果C或者C++的话,应该还需要手动处理一下这个20位长度的大数输入。思路就是:输入一个数,把这个数乘以二,将结果与原来的数字比较如果发现只是数字顺序上的改变,则输出Yes,否则输出No最后把乘以二的结果输出一下代码import java.math.BigInteger;import ja...原创 2019-08-06 13:20:37 · 18984 阅读 · 0 评论 -
【PAT甲级 进制转换】1019 General Palindromic Number (20 分) Java版 7/7通过
题目这道题可以说是非常友善了,说白了是个水题。题目没什么坑,一次通过,主要思想就是:输入两个数:num和base将num按照base进制转换,得到arr判断arr是否是一个回文数,并且输出这个arr的每一位代码import java.util.ArrayList;import java.util.List;import java.util.Scanner;public c...原创 2019-08-06 12:27:37 · 19029 阅读 · 0 评论 -
【PAT甲级 链表去重】1097 Deduplication on a Linked List (25 分) C++ 全部AC
题目思路:先把题目中的链表读进内存创建两个新链表listA, listB遍历原链表,把重复的放进listB,不重复的放进listA。放的时候,注意处理一下后继next中存的值。分别打印两个分离的链表listA,listB,注意补全5位address的前导0题解 C++每次提交结果不完全一样,有时候后两个测试点运行超时,有时候全部AC。实际比赛的时候,也要多试几次(上次就是,...原创 2019-08-27 15:38:01 · 20931 阅读 · 0 评论 -
【PAT甲级 排列组合】1093 Count PAT's (25 分) C++ 全部AC
题解对于字符串中每个A而言,若其前面有m个P,后面有n个T,可以得到对于当前的A,能够组成m*n种情况的PAT。因此找到A的位置,用A左边P的个数*A右边T的个数即可。题解1:我的解法 C++时间复杂度O(n)#include<iostream>#include<string>#define SIZE 100000using namespace std;...原创 2019-08-27 16:25:19 · 21051 阅读 · 0 评论 -
【PAT甲级 火星数字】1100 Mars Numbers (20 分)Java 全部AC
题目提交Java的时候,千万不要写第一行的包名称!!被这个bug折腾了一个小时。。题解1:Javaimport java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Main { static String marsGe[] = { "tret", "jan", "feb"...原创 2019-08-28 08:31:55 · 21119 阅读 · 0 评论 -
【PAT甲级 大数运算】1065 A+B and C (64bit) (20 分) Python 全部AC
题目初学python,第一次用python刷oj,挑了个简单题试试手。在大数运算方面,python没有数的大小限制,简直开挂。total = int(input())for i in range(0, total): a, b, c = input().split(" ") if int(a) + int(b) > int(c): print("Ca...原创 2019-09-18 10:12:39 · 21064 阅读 · 0 评论 -
2019秋季PAT甲级考试心得
第一道题一共四个测试点,做了一个小时,有两个测试点没过,得了12/20分做题的时候遇到一个问题,就是include<math.h>之后,使用pow(10,n)计算报错具有多个定义之类的(具体忘了怎么说的了,sqrt也会报错,有空的时候看看是什么原因,上次pat考试也遇到了这个问题,而且后来忘了这回事,一直没解决,这次又遇到了)第二道题是一个链表翻转排序的题,做了差不多一个小时,全部...原创 2019-09-09 12:00:11 · 21467 阅读 · 0 评论 -
【PAT甲级 stack queue的使用】1051 Pop Sequence (25 分) C++ 全部AC
题目思路维护三个集合:核心栈、数字队列、目标队列详细思路见注释题解 C++#include<iostream>#include<stack>#include<queue>using namespace std;int main() { int stackSize, len, total; cin >> stackSize...原创 2019-09-07 11:53:56 · 20980 阅读 · 0 评论 -
【PAT甲级 BigInteger运算】1024 Palindromic Number (25 分) Java 全部AC
题目题解 Java一开始用C++写的,有两个大数的测试点过不去,后来改用Java的BigInteger开挂,全部通过import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.math.BigInteger;public class Ma...原创 2019-09-07 10:31:54 · 21020 阅读 · 0 评论 -
【PAT甲级】1037 Magic Coupon (25 分) C++ 全部AC
题目大意:给出两组数字,找出两组数字的最大乘积和。思路:先排序,然后分别从头、从尾对应位置相乘,结果相加。直到相乘为负数为止。题解 C++#include<iostream>#include<algorithm>#include<vector>using namespace std;vector<long long int> v1;...原创 2019-09-06 22:39:36 · 20968 阅读 · 0 评论 -
【PAT甲级】1048 Find Coins (25 分) C++ 全部AC
题目给你一个sum,以及拥有的钱让你找出一个组合,正好用两张钱付清sum,注意如果有多个结果,输出其中最小的这道题注意稍微优化一下算法,要不然卡在测试点3,4我是用二重循环过了的,只要注意输入的时候去重一下数据,然后在计算的时候进行合理的剪枝,并不会超时。题解 C++#include<iostream>#include<algorithm>#includ...原创 2019-09-06 21:45:51 · 21215 阅读 · 0 评论 -
【PAT甲级 删除字符串中重复字母】1084 Broken Keyboard (20 分) Java 全部AC
题目题解 Javaimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main { public static void main(String[] args) throws IOException { BufferedRe...原创 2019-09-06 20:48:05 · 21076 阅读 · 0 评论 -
【PAT甲级 vector string排序】1047 Student List for Course (25 分) 含别人的做法
题目样例输出1 4ANN0BOB5JAY9LOR62 7ANN0BOB5FRA8JAY9JOE4KAT3LOR63 1BOB54 7BOB5DON2FRA8JAY9KAT3LOR6ZOE15 9AMY7ANN0BOB5DON2FRA8JAY9KAT3LOR6ZOE1题解1 C++两个测试用例不通过#include<...原创 2019-09-06 19:58:56 · 21162 阅读 · 0 评论 -
【PAT甲级】11077 Kuchiguse (20 分) Java
题目Java题解(最后一个测试用例没通过)import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;public class Main { public sta...原创 2019-09-06 16:25:57 · 21002 阅读 · 0 评论 -
【PAT甲级 BigDecimal科学计数法转换普通数字】1073 Scientific Notation (20 分) Java开挂解法 全部AC
题目分类讨论的话,挺复杂的一道题,要分离整数部分和指数部分,还要计算小数点的位置等等用Java的BigDecimal做这类大数处理题,简直开挂。我的测试用例+1.23400E-22答案:0.000000000000000000000123400题解 Javaimport java.io.BufferedReader;import java.io.IOException;import java.io.In...原创 2019-09-06 10:48:42 · 21064 阅读 · 1 评论 -
【PAT甲级 前导0,排序】1069 The Black Hole of Numbers (20 分) C++ 全部AC
题目一直循环相减即可,直到结果为6174或者四个数字相同就结束循环题解 C++#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;int cmp1(int a, int b) { return a > b;}int cmp2(int a...原创 2019-09-06 09:52:55 · 20953 阅读 · 0 评论 -
【PAT甲级 大整数BigInteger】1065 A+B and C (64bit) (20 分) Java 全部AC
题目在有些方面,比如大整数的处理,不得不佩服Java,好用没的说,像开挂一样题解 Javaimport java.math.BigInteger;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(Syst...原创 2019-09-05 22:10:26 · 21162 阅读 · 0 评论 -
【PAT甲级 约会】1061 Dating (20 分) C++ 全部AC
题目这个题要注意的细节很多。因为一个星期有七天,一天有24小时,所以要注意字母范围这个隐藏条件,不符合条件的字母要跳过。还要注意:第二次查找,要接着第一次找到的位置开始找。这个有点坑,题目里没说明白,只说是第二个相同的字符,我一开始是从头找的,所以这个点卡了很久。所以,做题还是要先读懂题再开始敲,不然的话,用错误的理解敲出来再一点一点改太浪费时间了。自己用的测试用例,测第二次查找的开始位...原创 2019-09-05 21:20:32 · 21210 阅读 · 0 评论 -
【PAT甲级 进位相加】1058 A+B in Hogwarts (20 分) C 全部AC
题目进位相加题解 C#include<stdio.h>int main() { int a1, b1, c1; int a2, b2, c2; int a3, b3, c3; scanf("%d.%d.%d %d.%d.%d", &a1, &b1, &c1, &a2, &b2, &c2); //c位 c3 = c1...原创 2019-09-05 12:00:03 · 21059 阅读 · 0 评论 -
【PAT甲级 扑克洗牌】1042 Shuffling Machine (20 分) C++ 全部AC
题目大概是所有题里面最简单的一道题了。10分钟解决。意思是:根据题目给的顺序洗牌,洗牌n次之后的结果输出。C++ 题解#include<iostream>#include<string>using namespace std;int main() { string arr1[] = {"","S1","S2","S3","S4","S5","S6","S...原创 2019-09-03 22:28:45 · 21073 阅读 · 0 评论 -
【PAT甲级 补全前导0 vector作为函数参数】1025 PAT Ranking (25 分) Java、C++
如何补全前导0JavaString idStr = String.format("%013d", out.id); //用0补全13位System.out.println(idStr);C++printf("%013lld", out.id); //用0补全13位容器vector在函数中的参数传递(1)值传递: 形参改变不影响实参void fun(vector<...原创 2019-08-08 12:13:06 · 21119 阅读 · 3 评论 -
【PAT甲级 环最短距离】1046 Shortest Distance (20 分) Java、C++
题目这题是给你一个环,让你计算两点之间最短距离。环的任意两点就两条路,只要算出环长和任意一条路的大小,另一条就出来了时间复杂度O(N)提前计算前缀长度和即可题解 C++全部测试点通过#include<iostream>#include<string>using namespace std;int main() { int total; cin...原创 2019-08-08 08:39:12 · 21107 阅读 · 0 评论 -
PAT1011 A+B 和 C (15 分)
题目这题简单,用long long int就不会越界代码#include<iostream>using namespace std;int main(){ long long int a, b, c; int i; int total; cin >> total; for (i = 1; i <= total; i++) { cin &g...原创 2019-02-25 18:00:59 · 375 阅读 · 0 评论 -
PAT1010 一元多项式求导 (25 分)
题目代码//3 4 -5 2 6 1 -2 0#include<iostream>#include<vector>using namespace std;class Multi{public: int xishu; int zhishu;};int main(){ Multi temp; vector<Multi>arr; i...原创 2019-02-25 16:45:32 · 377 阅读 · 0 评论 -
PAT1009 说反话 (20 分)【cin>>string类型数组 ctrl z结束 OJ可以用EOF】
题目给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。输出格式:每个测试用例的输出占一行,输出倒序后的句子。输入样例:Hello World Here I ...原创 2019-02-25 16:21:18 · 383 阅读 · 0 评论 -
PAT1008 数组元素循环右移问题
易错点循环右移的位数可能超过一个循环。不要盲目的用total减去循环右移的位数,要先用求余的方式把重复的循环去掉。自创测试用例测试用例9 31 2 3 4 5 6 7 8 9答案7 8 9 1 2 3 4 5 6测试用例9 41 2 3 4 5 6 7 8 9答案6 7 8 9 1 2 3 4 5测试用例10 41 2 3 4 5 6 7 8 9 10答案7 8...原创 2019-02-25 16:06:22 · 402 阅读 · 0 评论