![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT乙级
糯米糍Cici
摆烂的神~
展开
-
1097 矩阵行平移
1097 矩阵行平移思路:双端队列deque来实现数据的右移(前端push插入,后端pop出)#include<stdio.h>#include<iostream>#include<deque>#include<vector>using namespace std;vector<deque<int> > ve;int main(int argc, char* argv[]) { int n, k, x; cin原创 2022-05-11 09:56:07 · 222 阅读 · 1 评论 -
1096 大美数
1096 大美数思路:暴力枚举即可,没啥坑#include<stdio.h>#include<iostream>#include<vector>using namespace std;vector<int> go(int num) { vector<int> ve; for (int i = 1; i <= num; i++) { if (num % i == 0) { ve.push_back(i); }原创 2022-05-04 11:16:53 · 324 阅读 · 0 评论 -
1095 解码PAT准考证
1095 解码PAT准考证自己的倒数第二个测试点超时#include<stdio.h>#include<iostream>#include<vector>#include<string>#include<algorithm>#include<map>using namespace std;struct stu { char rank; string number; // 完整准考证号 string room原创 2022-05-03 17:39:56 · 260 阅读 · 0 评论 -
1094 谷歌的招聘
1094 谷歌的招聘思路:循环切出子字符串,转成数字然后判断是否是素数测试点2:需要输出K位数字,我一开始cout的是由子字符串转过去的整型,自动省略了前面的0,改为直接cout子字符串后就通过了#include<stdio.h>#include<iostream>#include<string>#include<math.h>using namespace std;typedef long long int lli;bool check原创 2022-04-30 15:58:40 · 158 阅读 · 0 评论 -
1093 字符串A+B
1093 字符串A+B思路:用一个map记录每个字符是否已经出现过,出现则continue,否则输出#include<stdio.h>#include<iostream>#include<map>#include<string>using namespace std;map<char, int> mp;int main(int argc, char* argv[]) { string a; string b; get原创 2022-04-29 14:49:42 · 239 阅读 · 0 评论 -
1092 最好吃的月饼
1092 最好吃的月饼思路:用一个map存储每种月饼的总销量,同时记录最大的销量数。用迭代器遍历map,当值和最大销量相等时就输出(map按缺省升序,即less<>排序即可)#include<stdio.h>#include<iostream>#include<map>using namespace std;map<int, int> mp;int maxSale = -1; // 记录最大销量int main(int原创 2022-04-28 10:59:40 · 91 阅读 · 0 评论 -
1091 N-自守数
1091 N-自守数思路:比较简单,对N进行穷举,符合条件的按照题目要求输出即可#include<stdio.h>#include<iostream>#include<string>using namespace std;int main(int argc, char* argv[]) { int m; cin >> m; for (int i = 0; i < m; i++) { int k; cin >> k;原创 2022-04-27 11:19:33 · 73 阅读 · 0 评论 -
1090 危险品装箱
1090 危险品装箱思路:用一个multimap来存储所有的不相容物品对,用一个vector来存储每一个物品清单。每当在物品清单里面发现一个物品同时也是multimap里面的一个键时,就检查vector里是否有键对应的值本人写的方法应该是不太简便的,最后一个测试点用时超过300ms,但毕竟是跑通了…#include<stdio.h>#include<iostream>#include<map>#include<vector>#include原创 2022-04-26 11:56:15 · 152 阅读 · 0 评论 -
1089 狼人杀-简单版
1089 狼人杀-简单版思路:嵌套循环,i是说谎的狼人,j是不说谎的狼人。每次循环里面,先建立狼人和好人的分配表K(狼人为0,好人为1),然后判断狼人说的话是否冲突,冲突的话直接continue狼人循环。再循环依次判断好人的话,如果好人的说谎者大于1就说明狼人i和j不成立,先break出好人循环再continue狼人循环。如果说谎者不大于1,也有两种情况:假如是0的话,也说明狼人i和j不成立,继续continue狼人循环如果恰好为1,则说明狼人i和j成立,打包成pair加入一个vector等原创 2022-04-25 11:55:52 · 741 阅读 · 0 评论 -
1088 三人行
1088 三人行思路:注意要考虑丙是浮点数的情况(测试点4)#include<stdio.h>#include<iostream>#include<string>#include<algorithm>#include<vector>using namespace std;struct jie { int jia; double yi; double bin;};vector<jie> ve;bool原创 2022-04-24 15:52:32 · 197 阅读 · 0 评论 -
1087 有多少不同的值
1087 有多少不同的值思路:创建一个map,如果式子算出来的和没出现在map里则把和作为键添加进去,出现过就跳过。最后输出map的size即可#include<stdio.h>#include<iostream>#include<map>using namespace std;map<int, int> mp;int main(int argc, char* argv[]) { int n; cin >> n; for (原创 2022-04-23 10:04:54 · 235 阅读 · 0 评论 -
1086 就不告诉你
1086 就不告诉你思路:获取乘积后转换成int然后reverse,记得去掉前面的0#include<stdio.h>#include<iostream>#include<string>#include<algorithm>using namespace std;int main(int argc, char* argv) { int a, b; cin >> a >> b; int c = a * b; st原创 2022-04-22 09:40:23 · 62 阅读 · 0 评论 -
1085 PAT单位排行
1085 PAT单位排行思路:先用map接收数据然后再转入结构体,对结构体列表进行自定义sort排序,最后输出#include<stdio.h>#include<iostream>#include<map>#include<algorithm>using namespace std;map<string, double> score; // 学校加权分数map<string, int> cnt; // 学校原创 2022-04-20 11:42:20 · 109 阅读 · 0 评论 -
1084 外观数列
1084 外观数列思路:比较简单,循环读取并计数即可。测试点3是考虑n为1的情况。#include<stdio.h>#include<iostream>#include<string>using namespace std;int main(int argc, char* argv[]) { string d; int n; cin >> d >> n; if (n == 1) { cout << d; }原创 2022-04-19 11:21:22 · 161 阅读 · 0 评论 -
1083 是否存在相等的差
1083 是否存在相等的差思路:读取每一张卡片前后面的数字,x是正面的,y是背面的。为确保差值为非负数,当x小于y时用swap算法交换两数。创建一个map来存储每个差值的重复次数。由于题目要求差值要从大到小输出,所以在创建map时传入仿函数greater<int>让map里的键值按降序排列。最后用一个迭代器遍历map,如果重复次数大于1则输出注意点:如果map按缺省升序排列的话,也可以让用逆向迭代器rbegin和rend来进行遍历,效果一致。对于map的迭代器来说,取值的时原创 2022-04-18 14:19:25 · 210 阅读 · 0 评论 -
1082 射击比赛
1082 射击比赛#include<stdio.h>#include<iostream>using namespace std;int biggist = -1;int smallest = 10001;string biggist_id; // 成绩最差的string smallest_id; // 成绩最好的int main(int argc, char* argv[]) { int n; cin >> n; for (size_t i原创 2022-04-16 10:53:27 · 224 阅读 · 0 评论 -
1081 检查密码
1081 检查密码坑点:测试点2一开始过不去,后来发现是因为密码里可能有空格。把cin改成了getline就过去了。以后有接收一行string的情况,尽量都使用getline#include<stdio.h>#include<iostream>#include<string>using namespace std;int main(int argc, char* argv[]) { int n; cin >> n; getchar();原创 2022-04-15 19:42:44 · 400 阅读 · 0 评论 -
1080 MOOC期终成绩
1080 MOOC期终成绩思路:结构体:里面四个变量,编号和三个成绩。创建一个10005大小的结构体列表。2个map分别存储每个学生的编程分数、期中分数三次for循环读取输入,前两次存到map里,最后一次读编号和期末成绩可以直接输入到结构体里,顺便把前两个map里的成绩也输入进结构体。对结构体列表进行排序,自己写sort的compare函数按顺序输出合格的人,若编程分数小于200或者总成绩小于则跳过坑点:总成绩要求四舍五入,算出来+0.5然后转int即可,经典转换。注意,题目要求如果原创 2022-04-14 19:11:55 · 510 阅读 · 0 评论 -
1079 延迟的回文数
1079 延迟的回文数思路:数字不超过1000位,那么肯定不能用整型来存储,哪怕long long int也装不下那么大的数字,所以还是用string来存储创建一个cnt记录翻转相加操作的次数用一个while循环,假如答案string仍不是回文数,并且cnt小于10,那么就继续执行翻转相加。数字A,reverse后是数字B,从个位数开始加,定一个初始值是0的进位符号flag。两位相加,再加上flag若大于10,则取个位数填入答案string,然后flag置1;否则flag置0。记得最后要检查最原创 2022-04-13 13:18:07 · 213 阅读 · 0 评论 -
1078 字符串压缩与解压
1078 字符串压缩与解压思路:接收一整行字符串到str这个string里面,创建答案字符串ans压缩过程:循环遍历这个字符串,用c表示字符,cnt表示该字符的个数。假如当前字符和上一个字符一样是c,则cnt加1;假如和上一个字符不一样:如果cnt大于1,则答案字符串写入数字加字符;如果cnt等于1,那么答案字符串仅写入字符。然后cnt清零,c变成当前字符。当循环到最后一个字符时,其实处理的是倒数第二个字符。所以我们要对最后一个字符单独处理,处理方式同上。解压过程循环遍历这个字符串,原创 2022-04-12 12:18:44 · 275 阅读 · 0 评论 -
1077 互评成绩计算
1077 互评成绩计算PS:浮点数四舍五入到整数可以用 int(x+0.5) 这种写法#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;int main(void) { int n, m; cin >> n >> m; // n:分组数 m:满分值 for (int i = 0; i < n; i++) { in原创 2022-04-09 12:40:32 · 203 阅读 · 0 评论 -
1076 Wifi密码
1076 Wifi密码思路:每一行用一个string字符串存储,遍历该行字符串,当读取到T的时候,就取前第二个字符 ,减去’A’再加1就是该行密码的值#include<stdio.h>#include<iostream>#include<string>using namespace std;int Ans[105];int main(void) { int n; cin >> n; getchar(); for (int i = 0原创 2022-04-08 14:12:06 · 71 阅读 · 0 评论 -
1075 链表元素分类
1075 链表元素分类思路:每个链表节点用一个结构体表示,结构体内两个参数,分别是当前节点的地址和值创建三个map,对应关系分别是:当前地址——下个节点地址当前地址——值当前地址——是否已经被提取(加入答案链表)用三次for循环分别抽取小于0的节点,小于等于K的节点,以及其他节点加入答案链表即可#include<stdio.h>#include<iostream>#include<map>using namespace std;struct原创 2022-04-07 12:14:39 · 885 阅读 · 0 评论 -
1074 宇宙无敌加法器
1074 宇宙无敌加法器思路:用string分别接收进制表和两个加数,然后存到三个列表里去。注意,进制表那个列表,假如string里的数字是0,则存进去的数字应该是10当加数的位数不到N位时,前面补0至N位。然后就是从最小位开始加和,和=加数+加数+flag进位标志:假如和小于进制,则该位就是和,flag=0假如和大于等于进制,则该位就是和减去进制,flag=1输出的时候,注意:假如flag是1,那么正常输出整个数字即可,因为不会出现数字前面有0的情况假如flag是0,那么要先把前原创 2022-04-06 13:45:42 · 163 阅读 · 0 评论 -
1073 多选题常见计分法
1073 多选题常见计分法思路提取标准答案串和学生答案字符串:用一个长度为105的string数组存储所有的标准答案字符串;用一个长度为1005的string数组来存储所有的学生答案字符串;每当学生答案字符串读取到 ‘)’ 时,就说明一道题的答案读取完毕了,开始计算该题的选项错误次数以及得分情况(分析原理见下面的详解)首先明确错误次数是如何计算的,根据题目的案例1可以得知:当多选题的标准答案里有这个选项而答题人没选时,该选项错误次数加1;当多选题的标准答案里没有这个选项而答题人选了,原创 2022-04-04 16:50:24 · 450 阅读 · 0 评论 -
1072 开学寄语
1072 开学寄语思路:用一个map<string, int>来接收所有被查缴的物品的编号,这样用if(mp[xxx])就可以确认学生的物品里到底有没有违禁品。每一个学生,创建一个vector来保存该学生的违禁物品cnt1记录问题学生人数,设立一个flag,假如这一行输入里有任一违禁品则flag从false变成true;结尾的时候判断,假如flag为true则cnt1加1,并且输出名字和违禁品编号cnt2记录问题物品人数。#include<stdio.h>#inc原创 2022-04-03 10:26:21 · 66 阅读 · 0 评论 -
1071 小赌怡情
1071 小赌怡情思路循环接收n1,b,t,n2四个整数先判断玩家筹码数是否大于t,如果小于t则直接输出Not enough tokens. Total = x.如果大于t,在判断具体的输赢 :n1>n2且b=0 || n1<n2且b=1这两种情况赢,剩余两种情况输循环体的末尾判断totol是否等于0,如果等于0则在下一行输出gameover#include<stdio.h>#include<iostream>using namespace std原创 2022-04-02 11:16:56 · 208 阅读 · 0 评论 -
1070 结绳
1070 结绳思路:用一个double数组存储所有的绳长数据。用sort指令对数组进行升序排序设double量ans=最短两根绳子长度之和除以2,然后每次把剩下的绳子里最短的那根和ans相加再除以2,值再赋给ans。把最后得到的值用int(ans)处理即可得到向下取整的答案#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;double Q[1000原创 2022-03-31 19:29:31 · 221 阅读 · 0 评论 -
1069 微博转发抽奖
1069 微博转发抽奖思路:先用一个string数组去接收所有的名字然后用一个for循环,i从s-1开始(第一个中奖的人),for循环第二个分号后面不写内容,在循环体内对i操作,每一次跳n(间隔)。用一个map来判断该名字是否已经获奖,假如获奖,那么i每次跳1#include<stdio.h>#include<iostream>#include<map>using namespace std;map<string, int> mp;原创 2022-03-29 18:49:17 · 99 阅读 · 0 评论 -
1068 万绿丛中一点红
1068 万绿丛中一点红思路:按照M和N循环读取像素点的值,用一个二元数组来存储。用一个map<int, int>来存储每一个数字出现的次数用一个check函数来检测某像素点是否满足和周围8数差值均大于阈值的条件坑点:题目要求的坐标点是先列坐标再横坐标,我们惯用的坐标表示方法是先列坐标再横坐标,输出的时候要注意转换注意达成的条件有两个,分别是数字独一无二、和周围8数差值均大于阈值当差值等于阈值的时候,也是不满足条件的#include<stdio.h>#i原创 2022-03-28 13:28:48 · 40 阅读 · 0 评论 -
1067 试密码
1067 试密码思路:用一个string存储密码,每次用getline来获取用户输入的密码s用整型变量cnt来记录尝试的次数如果得到的s是#,就退出循环;如果得到正确密码就输出正确语句退出循环;如果得到错误密码就继续循环读取;如果cnt==n,就输出超次语句退出循环。坑点:使用getline(cin, s)语句需要导入<string>包用getline之前要先用getchar()来读取上一行直接用cin读取留下的换行符#include<stdio.h>#原创 2022-03-27 20:52:34 · 85 阅读 · 0 评论 -
1066 图像过滤
1066 图像过滤#include<stdio.h>#include<iostream>#include<vector>using namespace std;vector<int> ve;int main(void) { int m, n, a, b, k; cin >> m >> n >> a >> b >> k; for (int i = 0; i < m * n; i原创 2022-03-23 20:26:35 · 43 阅读 · 0 评论 -
1065 单身狗
1065 单身狗思路:用一个大小为100010的int数组Q存储所有的到场者。读取所有的情侣序号,用一个map进行一一对应,即mp[a]=b, mp[b]=a。用一个数组P存储所有的到场者对P进行第一次遍历,把P作为Q的角标。抽到任一人时,假如map中能找到,那么数组Q中他和他的情侣全部+1。否则就自己+1对P进行第二次遍历,把P作为Q的角标。假如值为1或者0说明落单,用一个vector存储。对vector进行升序排序然后输出PS:注意最后输出格式用printf("%05d",x)原创 2022-03-22 11:30:27 · 264 阅读 · 0 评论 -
1064 朋友数
1064 朋友数思路:用string来获取每一个数字,再把每一位数字转成int格式即可用一个大小为100的数组来存放朋友证号,已有的朋友证号记为1,其余为0最后从大到小遍历数组即可PS:注意行末不能有空格的写法注意string和char类型的数据转换成int类型的写法# string转换成intint n = stoi(s);# char转换成intint n = c - '0';#include<stdio.h>#include<iostream>原创 2022-03-21 12:30:23 · 172 阅读 · 0 评论 -
1063 计算谱半径
1063 计算谱半径思路:用一个double值m来存储模的最大值,最后输出m的平方根即可。sqrt函数在math.h里#include<stdio.h>#include<iostream>#include<math.h>using namespace std;double m = -1;int main(void) { int n; cin >> n; for (int i = 0; i < n; i++) { double原创 2022-03-20 19:02:21 · 236 阅读 · 0 评论 -
1062 最简分数
1062 最简分数思路:读取两个分数,然后用两个double值存储具体的数字大小接着以给定的分母K为底,分子则从1循环到K,假如分子/分母的大小在两个数字之间,则看分母%分子是不是0,是0就说明不是最简分数坑点由于读取数字的时候是用int读取的,转换为double的时候只需要在分子处乘1.0即可涉及到double的比较时,假如两数非常接近(只差小数点后几位的数),直接用大小于号的比较可能会得出两数相等的结论。这里最好用两数相减然后和1e-8比较的方法来判断大小(测试点3)给出的两个分数没说原创 2022-03-19 20:02:11 · 214 阅读 · 0 评论 -
1061 判断题
1061 判断题思路:一个数组存储学生的分数信息一个数组存储结构体,结构体里分别是每道题的分值和答案循环读取学生答案,按分值加分数即可#include<stdio.h>#include<iostream>#include<vector>using namespace std;struct question { int score; int flag;} Q[105]; // 存储判断题信息int S[105]; // 存储学生分数i原创 2022-03-18 19:10:12 · 52 阅读 · 0 评论 -
1060 爱丁顿数
1060 爱丁顿数思路:现将获取到的数字进行升序排序,显然,爱丁顿数的条件就是,比E大的数字要超过E个。那么我们的思路就很简单了,把数组从大到小遍历,第一个满足比E大的数字要超过E个的数字就是所谓的爱丁顿数。PS:如何在数组里快速找到第一个比E大的数字呢,这里注意一个来自<algorithm>的函数upper_bound(first, end, num);返回一个迭代器(指针)从大到小遍历数组的时候,记得要从n开始遍历到0,而不是从n-1开始(坑点:测试点3)#include&原创 2022-03-17 19:17:02 · 212 阅读 · 0 评论 -
1059 C语言竞赛
1059 C语言竞赛思路:用一个map来存储id和对应的奖品序号ps:涉及到素数的尽量单独拉出来一个函数,看着更加方便清晰。注意循环里的j只要到原数的平方根即可,没必要全部循环完#include<stdio.h>#include<iostream>#include<map>#include<math.h>using namespace std;string ss[3] = { "Mystery Award","Minion","Ch原创 2022-03-16 21:06:36 · 556 阅读 · 0 评论 -
1058 选择题
1058 选择题思路:用一个结构体来存储每一道题的分值、答案、错误数,然后用一个列表来存放这些结构体;这里注意的是,存放答案的string字符串,无论是标准答案还是学生答案,只需要存储字母字符即可,这些空格是不要的。当判断学生答案和标准答案是否匹配的时候,只需要遍历学生答案的每个字符是否能在标准答案里find到,然后再匹配一下两者的长度即可。坑点:getline如果放在普通的cin后面使用,会先读取前面剩下的空字符,所以要先用一个getchar把前面的空字符拿掉再用getline#includ原创 2022-03-15 20:57:22 · 102 阅读 · 0 评论