
pat甲刷题记录
将自己的感悟记录在这里,跨考不易,但迈出去的步伐就是接近成功的道路
小道名宇
无论你混成什么样子,你都要相信前途无量。
展开
-
(pat甲)1063 Set Similarity
大意是给出N个集合,然后求出要求的两两集合的相同元素率,即两个元素的交集与并集。设置N个set集合,在读入时将元素放入对应set中,就可以消除同一个集合中的相同元素。之后对每一个查询(查询集合x与集合y的情况),设置两个int型变量total和same,分别表示不同元素的个数以及相同元素的个数,即并集与交集。然后枚举集合中x的元素,判断其是否在集合y中出现过,如果出现,说明找到一个相同元素,令s...原创 2019-08-04 17:56:48 · 174 阅读 · 0 评论 -
(pat甲)1039 Course List for Student
这道题因为最后一组数据庞大,所以使用map和string会超时,也不要使用cin和cout进行输入或者输出,若用二维数组存放学生所选的课程编号会导致最后一组数据内存超限,所以使用vector来减少空间消耗#include<cstdio>#include<cstring>#include<vector>#include<algorithm>u...原创 2019-08-03 23:30:08 · 148 阅读 · 0 评论 -
(pat甲)1078 Hashing
这道题是给出散列表长Tsize和欲插入的元素,将这些元素按读入的顺序插入散列表中,其中散列函数为H(key)=key%Tsize先对输入的Tsize进行素数判断,若不是素数,则要找到第一个比它大的素数,然后开一个bool型数组hashtable[],为false时表示未被使用,若已被使用则跟据二次探查法令步长step为1,然后令下一个检测值为(a+stepstep)%Tsize,判断该位置是否已...原创 2019-08-02 20:15:56 · 130 阅读 · 0 评论 -
(Pat甲)1015 Reversible Primes
首先说明一下题意,就是输入一个数,然后判断它是不是素数,如果是,将它进行进制转换,转换后得到的数再次进行素数判断,如果是素数。就输出Yes,否则输出No#include<cmath>#include<cstdio>bool isPrime(int n)//判断素数,特别注意n为1的情况,{ if(n==1) return false; fo...原创 2019-08-02 19:11:32 · 171 阅读 · 0 评论 -
(PAT甲)1081 Rational Sum
这道题是一道求输入分数之和的题,可能有负数。如果答案为假分数,则要按照带分数的形式输出,整数则按照整数输出,否则按照真分数输出。注:负数无需特殊处理,只需要当作分子为负数的分数即可 数据范围为int,两个分母相乘时,最大可以达到long long,所以如果使用int会溢出,得到“error” 计算最大公约数时,注意分子分母绝对值的公约数,否则数据会错误 且必须在每一步加法后均进行约...原创 2019-07-27 01:19:49 · 116 阅读 · 0 评论 -
(PAT甲)1049 Counting Ones
这道题如果直接从1遍历到n会超时,所以要通过特殊的数字寻找规律。规律比较难找,可通过举例子来寻找。可以先给出一个数,然后从低位到高位分别标上1,2,3,4.。。对每号位进行判断解析例如数30710,一号位为0,其左侧为3071,因此在1~n中,仅在高四位为0000~3070中,1号位701才可以取到1,从00001到30701总共有3071种情况,2,3,4,5号位以此推论#incl...原创 2019-07-26 00:11:48 · 174 阅读 · 0 评论 -
(PAT甲)1008 Elevator
这道题比较水,就是两道if语句判断当前楼层与到达楼层的关系即可,每层楼需要停留5秒的时间,特别注意的是当要求运行楼层轨迹完成时电梯不会返回0层,所以需要手动将到达楼层赋给当前楼层#include<iostream>using namespace std;int main(){ int n, sum = 0, now = 0, to; cin >> n; f...原创 2019-07-25 22:56:27 · 194 阅读 · 0 评论 -
(Pat 甲)1104 Sum of Number Segments
这道题的目的是统计元素个数为n的序列的每一个在不同序列长度的连续片段中出现的次数之和。通过举例可以得出,若当前是第i个数,那么其总出现次数等于i*(n+1-i)#include<iostream>using namespace std;int main(){ int n; double t, s = 0; cin >> n; for (int i = 1...原创 2019-07-25 22:14:11 · 149 阅读 · 0 评论 -
(PAT甲)1069 The Black Hole of Numbers
这道题不难,把数字放到数组里然后进行两次排序,得到非递增和非递减的两组数字,不断重复过程最后会得到6174这个数字,特别注意的是输出样例中有四个空格,题目中没有说明,但是可以从输出样例中看出来,当时我就是调试这个花了不少时间,然后注意168这类数字需要用0补齐(在高位补),为0168,因为有补0的关系,这里用c语言会比较方便,我是用c++写的,所以会看着相对冗余#include<ios...原创 2019-07-24 21:54:35 · 224 阅读 · 0 评论 -
(PAT甲)1001 A+B Format
这道题是要在结果数字中以逗号分隔,基本思路是将数字用数组存储,然后逆序遍历并输出逗号#include<iostream>#include<algorithm>using namespace std;int main(){ int a,b,num[8],sum; int i=0; cin>>a>>b; su...原创 2019-07-27 11:14:53 · 161 阅读 · 0 评论 -
(PAT甲)1101 Quick Sort
这道题若用暴力解题同样会超时,考虑大小的继承关系有以下思路开辟两个数组,第一个数组leftmax[i]用来记录序列a的每一个左边的最大数,即leftmax[i]表示a[0]~a[i-2]之间的最大值,令leftmax[0]=0,从左到右遍历序列a,由于leftmax[i-1]记录了a[0]~a[i-2]之间的最大值,所以如果a[i-1]比leftmax[i-1]大,则说明leftmax[i]等...原创 2019-07-19 21:09:18 · 178 阅读 · 0 评论 -
(PAT甲)1093 Count PAT's
此题若采用暴力解题会超时,应有以下思路,对一个确定位置的A来说,以它左边P的个数乘以右边T的个数,每个A的累积乘积即为结果,所以以数组leftnumberP记录每一个A边P的个数,以数组rightnumberT记录每一个A右边T的个数,可以减少代码量#include<iostream>#include<string>using namespace std;co...原创 2019-07-19 09:10:59 · 205 阅读 · 0 评论 -
(PAT甲)1080 Graduate Admission
#include <cstdio>#include <algorithm>using namespace std;struct Student { int GE, GI, sum;//初试成绩,面试成绩和总成绩 int r, stuID;//排名和学生编号 int cho[60];//k个选择学校的编号}stu[400...原创 2019-07-14 20:26:34 · 200 阅读 · 0 评论 -
(PAT甲)1050 String Subtraction
#include#includeconst int MAX_LEN = 10005;char a[MAX_LEN], b[MAX_LEN];bool hashtable[128];//记录你字符是否在第二个字符串里出现过int main(){gets_s(a);gets_s(b);int lenA = strlen(a);//strlen必须在int lenB = strlen...原创 2019-07-14 20:21:37 · 147 阅读 · 0 评论 -
PAT甲 1041 Be Unique
`#includeint a[100001], hashtable[10001] = { 0 };//a[]为输入数字,hashtable为散列数组int main(){int n;scanf_s("%d", &n);for (int i = 0; i < n; i++) {scanf_s("%d", &a[i]);hashtable[a[i]]++;}...原创 2019-07-14 19:52:43 · 135 阅读 · 0 评论