![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PTA乙级
壹零叁玖
多多重复 百炼成钢
展开
-
PTA刷题Basic篇——1095.解码PAT准考证号——Day(33)
有点激动,终于把PAT乙级的95道题都刷完了,可以着手刷甲级的题目了。刷题之路永远不能停,即使你已经工作了,考上研究生了。每天都必须要保证自己的刷题量,这才叫程序员。问题描述按照类型1,2,3的要求输出相应的考生信息。题目分析这道题目我经历了很多次超时,后来借鉴了一下别人的思路,发现可以使用一种新的STL容器——unordered_map,它的底层和map完全不一样。map的底层是一个红黑树,自动维持平衡,并且有序,但是数据查找效率低;而unordered_map的底层是哈希表,所以它的查找效率原创 2020-05-26 01:12:58 · 311 阅读 · 0 评论 -
PTA刷题Basic篇——1094.谷歌的招聘——Day(47)
问题描述在长度为N的数字中找出最早出现的长度为K的素数,将其输出。题目分析判断素数的函数不用说了。这道题主要用的是字符串的技巧。我们可以直接对输入的字符串进行遍历,每次截取k个字符并转化成数字(这两个字符串的技巧很常用,一个是substr,一个是stoi) .如果是素数就输出,到最后都没有素数,就输出404。代码#include <string>#include <iostream>using namespace std;bool isPrime(int n){/原创 2020-05-25 09:15:08 · 284 阅读 · 0 评论 -
PTA刷题Basic篇——1093.字符串A+B——Day(47)
问题描述输出在两个字符串中仅出现一次的字符,先输出A,在A中输出过的在B中不能再重复出现。题目分析开辟一个长度为200的数组a(因为ASCII码值最多为200)。输入A,B两个字符串,先对A字符串进行遍历。对A每一位字符,用其ASCII码值做索引,对应值存1.然后对B字符遍历,也将其每一位字符对应的ASCII值作为索引,值存为1。然后我们不对a数组进行遍历,这会导致乱序,仍然对A遍历,如果a[A[i]]==1,说明此时这个字符还没出现,我们将其输出,然后将a[A[i]]-=1使其变为0,标志其已原创 2020-05-25 09:11:15 · 184 阅读 · 0 评论 -
PTA刷题Basic篇——1092.最好吃的月饼 ——Day(46)
问题描述输出最受欢迎的月饼销量及种类,如果有并列就递增输出。题目分析将所有月饼的销量存入一个nxm的矩阵中,计算矩阵每一列的和,就可以得到这一种类月饼的总销量。将其存入一个数组,遍历数组找出最大值。创立一个index数组记录销量最大值月饼的种类。如果当前的sum>max,我们就将index数组清空,将新的种类push进入index;如果sum==max,我们也将此种类月饼push进入index,但我们不需要将index数组清空,只有当遇到更大的值才会清空。遍历index数组,依次输出最大销原创 2020-05-24 11:00:29 · 171 阅读 · 0 评论 -
PTA刷题Basic篇——1091.N-自守数——Day(46)
问题描述找出一个N自守数,N-自守数满足的要求如题目所示。输出N-自守数的N值和该数字,用空格间隔开。题目分析由于N<10,所以我们完全可以通过遍历N的方式找到正确的N值。但我们要怎样得到NK^2后面的几个数字呢?我们的做法是对输入数字judge的大小进行判断:1.如果num<10,则NK^2 % div就可以得到最后的一个数字(div=10)2.如果num<100,则NK^2 % div可以得到最后两个数字(div=100)3.如果num<1000,则NK^2 %原创 2020-05-24 10:48:35 · 256 阅读 · 0 评论 -
PTA刷题Basic篇——1090.危险品装箱——Day(45)
问题描述根据不相容的物品列表,判断货物清单是否合理。题目分析又是一道考验逻辑和STL使用的题目。声明一个map,key为int类型,value为int类型的vector数组,存放与这个货物不相容的货物id。我们输入的前n行就可以将这个map填充好。在判断清单是否合理的时侯,我们先创建一个vis数组,将清单中的货物标号作为索引,其值都置为1。然后对输入的编号进行判断:1.若此编号未出现在map中,跳过;2.若此编号出现在map中,遍历这个key对应的vector数组,如果其中某个元素在vis中,原创 2020-05-24 00:43:03 · 183 阅读 · 0 评论 -
PTA刷题Basic篇——1089.狼人杀简单版——Day(45)
问题描述所有人中有两个说谎,但只有一个说谎的狼人,我们需要找出两个狼人。题目分析乍一看这个题目真的是没有一点头绪,感觉没有什么特殊的数据结构或者算法可以解决这个问题。是的,这个确实没有什么数据结构和算法可以应用,只是一个逻辑层面的问题。我们的方法是遍历所有成员,每次选出两个成员作为说谎的人,他们之中必有一个是一个狼人。另外开辟一个数组,索引为所有人的编号,将目前假设为狼人的这两个人的值设-1,其他人设为1。下面我思考一下,如何判定这一个人是否说谎了呢?下面就需要知道如何判断说谎者的条件:自己原创 2020-05-23 15:32:02 · 276 阅读 · 0 评论 -
PTA刷题Basic篇——1088.三人行——Day(44)
问题描述算出甲乙丙的能力值,并与自己的能力值对比,输出相应关系。题目分析这道题其实就是一个解三元三次方程的问题,但是利用程序我们不可能解出具体的解。所以我们从大到小,即从99-10遍历,将其中的值赋值给甲,然后通过甲的两个数字交换得到乙。当满足|甲-乙|%x==0&&乙%y==0&&甲/x==乙/y时满足条件,输出甲值,算出乙的能力和丙的能力,继而输出关系即可。代码#include <iostream>#include <cmath>u原创 2020-05-22 14:15:06 · 133 阅读 · 0 评论 -
PTA刷题Basic篇——1087.有多少不同的值——Day(44)
问题描述给出数字N,找出1-N中所有数字i,使得i/2+i/3+i/5得到不同结果,问有多少不同结果。题目分析很简单,我也没有采取任何技巧,需要注意的是我们需要把N的数据类型声明为double类型,因为我们需要向下取整,只有对double有效。声明一个大的数组,将结果作为索引,将对应位置的值改为1。如果该索引对应的值本身就是1我们就跳过;如果不是1,则说明这个结果还没有出现,我们将不同值的数目+1.代码#include <iostream>#include <math.h&原创 2020-05-22 14:08:30 · 129 阅读 · 0 评论 -
PTA刷题Basic篇——1086.就不告诉你——Day(43)
问题描述将两个数相乘的结果倒序输出。题目分析即使是1000*1000,我们定义一个long long类型也不会越界。所以可以放心大胆地相乘,然后每次除以10取余数,得到的数直接输出,到了最后就是倒序输出的结果了。但是需要判断一下,就是首位不能是0,如果遇到了0且前面没有非0数字,我们就跳过,所以需要一个变量来指示前面是否有非0数字。代码#include <iostream>#include <vector>using namespace std;int main(原创 2020-05-21 15:07:02 · 302 阅读 · 0 评论 -
PTA刷题Basic篇——1085.PTA单位排行——Day(43)
问题描述输出学校总数(相同字母构成的学校是相同学校,无论大小写),并将所有学校单位按照总分进行排序,所有学校单位的名称均为小写。题目分析这道题很简单,只要搞清楚逻辑即可,代码量可能会比较大,而且会出现运行超时的情况,没错,一开始我一直超时。定义一个结构体match,包括学校数目,学校名称,以及学校分数首先声明一个map,在输入学号,成绩和学校时,将学校的名字全部换为小写字母作为map的key,分数这个数据成员一定要声明为double的,因为最后需要对小数取整,最好声明为double类型。将分数存原创 2020-05-21 14:59:52 · 440 阅读 · 0 评论 -
PTA刷题Basic篇——1084.外观数组——Day(42)
问题描述按照题目规则,给出外观数列的第n项。题目分析首先给出一个字符串形式的d,初始化str=d.我们利用双指针在字符串上游走,如果遇到慢指针!=快指针,我们就可以停止遍历字符串了,用快慢指针索引的差来表示相同字符连续出现的次数,并将其与这一连续出现的字符放入到新字符串中。找到了第一个连续出现的字符以后,我们还需要更新慢指针,将其放在快指针的位置,作为寻找下一个连续出现字符的起始位置。最后,我们用新字符串更新str,作为下一个需要被描述的字符串。代码#include<string>原创 2020-05-20 09:25:40 · 126 阅读 · 0 评论 -
PTA刷题Basic篇——1083.是否存在相等的数——Day(42)
问题描述找出卡片正反面差值重复的几个数,并从大到小排序输出。题目分析开辟一个数组,数组的index是每张卡牌正反面的差值,value是出现次数。我们在输入的过程中,只需要将卡牌的正反面相减得到的差作为索引,就value++即可。由于最后是从大到小排列,所以我们逆序输出即可,当value>1时我们就将其输出。代码#include<iostream>#include<math.h>#define MAX_LEN 10000using namespace std;原创 2020-05-20 09:14:12 · 117 阅读 · 0 评论 -
PTA刷题Basic篇——1082.射击比赛——Day(41)
问题描述输出射击距离原点最近和最远的选手编号。题目分析我们将id作为int类型输入,输出时可以用printf规划格式,这样就简便了很多,不需要对字符串进行处理。边输入边计算距离,不断更新最大距离和最小距离,并用两个int变量记录选手id。最后按照4位的格式输出(不足补0).代码#include<iostream>#include<algorithm>#include<cmath>using namespace std;struct Player{ i原创 2020-05-19 09:56:39 · 595 阅读 · 1 评论 -
PTA刷题Basic篇——1081.检查密码——Day(41)
问题描述检查密码的正确性,如果密码不正确输出不正确的情况。题目分析题目非常简单,只需要边输入边判断即可,但是需要注意顺序,我们需要把没有数字和没有字母两种情况放在最后两个,因为如果存在不合法字符的话,也有可能是这两种情况。且每种情况判断输出完之后都continue,不再做其他判断了。代码#include <iostream>#include <string>using namespace std;int main(){ int n;//输入的密码数目原创 2020-05-19 09:52:10 · 673 阅读 · 0 评论 -
PTA刷题Basic篇——1080.MOOC期中成绩——Day(40)
问题描述根据编程考试、期中考试和期末考试的分数,将超过合格线的学生选出来,并排序(顺序为总分从大到小,如果相等,名字递增)如果没有这门考试的成绩,则记为-1。题目分析我们首先先声明一个结构体,其中包括学生的学号,期中成绩,期末成绩,编程成绩与总成绩。初始化都为-1.然后给定一个map,索引类型为字符串,即学生的学号;value类型是一个student结构体,我们会根据输入的三种分数,对同一id的学生的分数进行更新.在输入id的同时,我们用一个vector来记录每个学生的学号,方便后续根据所有学原创 2020-05-18 00:21:11 · 240 阅读 · 0 评论 -
PTA刷题Basic篇——1079.延迟的回文数——Day(40)
问题描述对某一个输入的数字按照题目要求进行反转加和,判断结果是否为一个回文数。并按照规则输出。题目分析我们将数字以字符串的形式输入到一个字符数组中,然后倒转这个数组,遍历两个数组并将对应位置相加,这里一定要记录进制位,因为我们每次将对应位置相加也要考虑进制位。如果输入的数本身就是个回文数,我们就直接输出是回文数的语句即可。重复上述过程,复制数组->反转数组->按位加和->得到新数组->新数组反转…最多可以重复十步,超过了十步我们就要输出not found的语句了。原创 2020-05-17 23:26:18 · 157 阅读 · 1 评论 -
PTA刷题Basic篇——1078.字符串的压缩与解压——Day(38)
问题描述将字符串按照规则解压或者压缩题目分析题目很简单,主要是麻烦。需要判断多种情况。见到字符串我们最好就用getline的方式输入,因为无法确保其中究竟有没有空格字符。首先我们根据输入的是C还是D判断出要解压还是压缩。如果遇到了压缩情况,我们就要判断当前字符与前一个字符是否相等:1.如果不相等,则直接输出前一个字符出现的数目及这个字符。如果数目为1,就直接输出字符即可。但是到了最后一个字符,如果和倒数第二个字符不相等的话,我们需要单独拿出来处理输出。2.如果相等的话,但是已经到了最后一原创 2020-05-16 13:00:13 · 266 阅读 · 0 评论 -
PTA刷题Basic篇——1077.互评成绩计算——Day(39)
问题描述根据题目所述的规则,输出每个同学的最终得分。题目分析我们输入的每一行的第一个数为老师打分,这个数字在我们每次输入的时候都要变为0,输入之后才有固定数值。剩下n-1个数,我们将其全部加和,边输入边更新最大值和最小值,最后用加和减去最大值和最小值。不合法的数我们将其数目mis记录下来并跳过,因为计算平均数的时候需要用到。计算平均数时规则为:(sum - max - min) / (n-3-mis)其中n-3表示去掉了老师给分,最高分和最低分,最终这个数与老师得分做平均即可。代码#inc原创 2020-05-16 12:49:29 · 193 阅读 · 0 评论 -
PTA刷题Basic篇——1076.WiFi密码——Day(38)
问题描述根据题目的正确选项破解WiFi密码。A代表1,B代表2,C代表3,D代表4.题目分析这个题很简单,我们还是边输入边输出。通过getline输入一行字符串,遍历字符串直到找到了’T’,T的前面两个字符就是我们的正确答案。正确答案-‘A’ +1 即可得到这一位置的密码。代码#include <iostream>using namespace std;int main(){ int N;//题目数 cin>>N; getchar();//原创 2020-05-15 12:06:51 · 1518 阅读 · 0 评论 -
PTA刷题Basic篇——1075.链表元素分类——Day(38)
问题描述将链表按照规则分类,负数在前面,0-K在中间,>K在最后,但是元素之间保持原顺序不变。题目分析我们可以创建不同的数组,分别用来存储首地址,尾地址和数据。其中数据和尾地址的索引都是首地址,这么存储可以形成一个类似hash的数据结构。首地址数组是按照连接顺序存储的首地址,再开辟另一个数组用来存储排好序的首地址。我们利用这几个数组就可以开始折腾了,首先遍历整个首地址数组,取出首地址对数据进行索引,判断数据大小即可。在这里需要注意顺序,我们要按照排序的顺序进行处理,首先先对负数数据排序原创 2020-05-15 12:03:25 · 189 阅读 · 0 评论 -
PTA刷题Basic篇——1074.宇宙无敌加法器——Day(37)
问题描述输入三个数字,第一个数字的每一位表示对应位置的进位数,按照第一个数字每个位置的进位数将第二个和第三个数字加和,并做进位处理输出。题目分析输出三个字符串s1,s2,s3我们先做预处理:如果s2和s3的长度不等的话,我们就用0填充在较短的字符串前面,保证两个字符串长度相等。这里我们使用string的insert函数,具体参数形式和作用大家可以百度。按照进位规则相加我们将两个字符串按位相加再加上进位值,除以s1对应位置的数,得到了新的进位数,余数为对应位置的结果,将其压入栈中。重复这个过程原创 2020-05-14 14:23:57 · 150 阅读 · 0 评论 -
PTA刷题Basic篇——1073.多选题常见计分法——Day(37)
问题描述根据问题的分值,正确选项以及选项数目,结合每个同学的答题情况,输出每位同学的得分以及题目出错情况。题目分析这道题说来惭愧,我感觉是和58题很类似的,但是改起来就比较费劲了。正好最近在leetcode上刷位运算的题目,对位运算以及去判断两数是否相等或者字符是否重复很敏感,又结合了网上一些大神的思路,觉得这道题可以掺杂运算的思路解决。我们首先为每个选项分配一个5位的数字,00001-a,00010-b,00100-c,01000-d,10000-e。我们将其存入一个hash数组中,方便随时取原创 2020-05-14 13:51:06 · 264 阅读 · 0 评论 -
PTA刷题Basic篇——1072.开学寄语——Day(36)
问题描述输出携带违规物品的同学姓名以及携带违规品的编码最后输出带违规品的同学数目以及违规品总数。题目分析我们以字符串的形式输入违规品编号,然后将其放入map中,value为1,方便后面判断同学携带的物品是不是违规品。然后我们将每个同学和携带物品用getline以字符串形式输入,如果其有携带违规品,我们则map[物品编号]==1,我们就将违规物品放入一个string类型的vector中,最后我们输出学生姓名以及其携带的违规品即可。对于学生姓名和违规品的存储,我们都用遍历字符串并且字符出拼接的方原创 2020-05-13 11:03:45 · 166 阅读 · 0 评论 -
PTA刷题Basic篇——1071.小赌怡情——Day(36)
问题描述根据咦哟i根据已有筹码和所押计算输赢情况的筹码总数以及输赢状态。题目分析题目很简单,仍然是边输入边输出。如果Total小于等于0,则表示我们负担不起这个赌注,我们就应该结束程序,输出game over;如果所押筹码大于Total,表示我们负担不起这个赌注,应该跳过这个输出not enough等等;n1<n2&&b == 1或者n1>n2 && b==0,我们都算赢的情况,将Total加上所押筹码并输出即可;反之就算输了,Total减去t。注意,原创 2020-05-13 10:48:26 · 163 阅读 · 1 评论 -
PTA刷题Basic篇——1070.结绳——Day(35)
题目描述按照规则,找出给定绳长可以结成的最长绳子长度。题目分析找最长或者最短,我们一定会想到排序,所以二话不说先将所有长度全部输入到一个vector数组中,然后排序。具体应该怎么排序呢?首先我们先要读懂题目:题目的意思是,两个绳子结在一起之前应该先对折,然后再与下一段结在一起。我们思考一下,如果我们从大到小排序,那么前面的绳子就会比较长,但是越往后绳子越短,因为这涉及到一个二者加和除2的情况(对折),这个过程相当于求平均值。那么较短的绳子就会拖长绳子的后腿,导致平均值越来越小,所以我们不能从大到原创 2020-05-12 01:07:22 · 134 阅读 · 0 评论 -
PTA刷题Basic篇——1069.微博转发抽奖——Day(35)
问题描述从转发微博的网友中找出中奖者输出,同一个人不能被抽中两次,如果无人中奖输入"Keep going…"题目分析输入转发人数n,间隔中奖人数m和开始中奖的人数s。我们通过getline的方式输入转发者的名字,将他们存入一个vector数组中和一个map中,其中map的value全部初始化为0.如果第一个中奖的人在vector中不存在,即vector.size()<s,则可以直接输出"Keep going…"然后退出程序。否则我们开始遍历vector数组,从第一个中奖者的序号开始遍历,如原创 2020-05-12 00:56:51 · 149 阅读 · 0 评论 -
PTA刷题Basic篇——1068.万红丛中一点绿——Day(34)
题目描述找出图中所有像素满足要求的一个像素,并输入其位置和对应像素值,如果不唯一则输出not unique,不存在输出not exist.题目分析我们可以使用增量数组,将某个像素8个方向的位置变化描述出来,这有点像广度优先遍历找寻小岛的问题。将8个方向描述出来后,我们就要判断某个位置是否满足要求,满足要求即这8个位置的像素点与像素点的差值都大于TOL。我们可以看到输出中包含坐标和像素值,则我们最好声明一个结构体,包括像素点的x,y和value。这样方便运算。我们将每个像素值出现的次数和像素值存原创 2020-05-11 09:01:36 · 125 阅读 · 1 评论 -
PTA刷题Basic篇——1067.试密码——Day(34)
问题描述就和我们平时瞎蒙别人的密码一样,输入正确会有提示并且直接退出,输入错误也有提示,当输入错误达到一定次数的时候会提示我们用户已经被锁了,也会直接退出。题目分析我们边输入字符串边与正确密码比较,如果正确的话输出"Welcome in"直接退出break如果错误的话要将错误密码输出,如果错误达到允许错误次数,直接输出"Account locked"并退出。这里说几个易错点:1.字符串比较是可以直接用运算符的,也可以用cstring的compare函数,如果相等会返回0。2.我们输入字符串不用c原创 2020-05-11 08:53:15 · 171 阅读 · 0 评论 -
PTA刷题Basic篇——1066.图像过滤——Day(33)
问题描述将输入区间的数变为我们需要替换的数,并按照规则输出。题目分析给定输入的像素尺寸和像素值,再给定替换区间和替换数字。将像素放在一个二维矩阵中,如果输入的像素值在我们的替换区间中,我们就将它替换为需要替换的值,如样例中的0。最后我们遍历二维矩阵并输出,输出的格式是满足像素值必须为3位数字,不够的用0填充即可。代码#include <iostream>#include <cstdio>using namespace std;int main(){ in原创 2020-05-10 16:52:19 · 90 阅读 · 0 评论 -
PTA刷题Basic篇——1065.单身狗——Day(33)
问题描述找出参加派对中单身的人数和编号,如果此人有伴侣但是伴侣并未到场也算单身。题目分析我觉得这个题目主要是考察我们那几个重要的stl容器的基本操作。我们首先先要知道有伴侣的人伴侣是谁。这个就需要用到map来存储,存储每个人的伴侣。随后我们输入参加派对的人,将这些让入set集合中,为什么呢?因为set可以避免重复而且可以自动排序我们将所有的参加人员加入set中,然后遍历这些人,在map中查找其伴侣是否出现在set中,未出现说明其伴侣没有来参加派对,将这个人的编号加入另一个结果set中。如果压根在原创 2020-05-10 16:46:53 · 201 阅读 · 0 评论 -
PTA刷题Basic篇——1064.朋友数——Day(32)
题目描述算出输入数字的朋友数,并将不同的朋友数输出。题目分析输入的数字中包含空格,所以不能简单的输入,而应该通过getline来输入字符串。在getline之前应该用getchar获取cin>>n之后的空格。遍历输入的字符串,如果不是空格,就转变为对应的ASCII码并加和得到sum,遇到空格就将前面的sum放入一个vector数组中,并将sum置为0,继续遍历。但是最后一个数字不能被加入,所以我们要单独把他加入。将vector从小到大排序,遍历找出其中相邻不相等的元素加入到另一个ve原创 2020-05-09 00:58:20 · 155 阅读 · 0 评论 -
PTA刷题Basic篇——1063.计算谱半径——Day(32)
题目描述在给定的实部和虚部中,求出最大的模,模的计算公式为实部与虚部的平方和开平方。结果保留两位小数。题目分析输入实部虚部,边计算边比较出最大值,为了防止出现溢出,除了输入的n以外,其他数据类型都声明为long double类型,最后保留两位小数。代码#include <iostream>#include <iomanip>#include <math.h>using namespace std;long double max_(long double原创 2020-05-09 00:51:22 · 198 阅读 · 0 评论 -
PTA刷题Basic篇——1062.最简分数——Day(31)
题目描述将给定的分数变为以K为分母的形式,从小到大输出。题目分析这里有一个失分点,就是我们一开始不能保证输入的第一个分数一定大于第二个分数,所以如果第一个分数小于第二个分数,我们将二者交换。然后i从1遍历到k,如果中间有n1/m1 > i / k且n2 / m2 < i / k且i/k是最简分数,则我们可以将i/k输出。按照这种规则,找出两个即可。(也可以选择刚开始就从小到大...原创 2020-05-08 01:43:46 · 197 阅读 · 0 评论 -
PTA刷题Basic篇——1061.判断题——Day(31)
问题描述根据每道题的得分以及正确答案计算每位学生的得分。题目分析声明一个正确答案数组,存储正确答案;声明一个得分数组,存储每道题的得分。一边输入学生的答案,一边与正确答案比较,如果正确就将总分加上相应的题目分数。最后输出总分。代码#include <iostream>using namespace std;int main(){ int n,m; cin...原创 2020-05-08 01:26:50 · 226 阅读 · 0 评论 -
PTA刷题Basic篇——1060.爱丁顿数——Day(30)
题目描述找出数组中的爱丁顿数,爱丁顿数E满足的要求是,在数组中有E个元素大于E。题目分析我们可以将i从1遍历到输入的N,判断其中是否有i个数大于i。找出最大的i即可。但是这种方法时间复杂度有点高,所以我们换一种方法。我们先给出E初始化为0,将数组从小到大排序。从第一个位置开始遍历,如果这个位置的公里数>E+1(E+1是天数),则我们将E+1;否则,我们直接break退出,因为数组...原创 2020-05-07 11:13:32 · 163 阅读 · 0 评论 -
PTA刷题Basic篇——1059.C语言竞赛——Day(30)
题目描述根据排名给出选手序号。输入查询选手ID以及其获得的奖励。题目分析这道题我们使用STL中的map数据结构来存储信息,当我们输入id的时候,我们将id和对应索引+1(代表排名)加入map中,方便我们后来根据id来查找排名。定义一个判断素数的函数,判断排名是否为素数。如果id不存在,说明查不到,在map中如果查不到对应的key值的话,当我们调用map.find(key)时会返回map...原创 2020-05-07 11:01:33 · 132 阅读 · 0 评论 -
PTA刷题Basic篇——1058.选择题——Day(29)
题目描述根据每道题的得分,选项数以及正确选项,计算出每个同学的题目得分以及错题最多的题目错误次数及编码。题目分析首先定义一个结构体,结构体包括问题得分,正确选项数目和正确选项以及错误的数目还有问题编号。定义的目的是方便我们在排序的时候将其一起排序。对于每个题目的正确选项数目和选项我们可以通过getline的方式读入,因为内部含有空格。对于我们每个同学选择的选项以及选项个数也通过get...原创 2020-05-06 00:04:55 · 173 阅读 · 0 评论 -
PTA刷题Basic篇——1057.数零一——Day(29)
问题描述将输入的英文字母转化为对应的ASCII码并加和。将结果转化为二进制,统计0和1的数目。题目分析我们可以看出来给定的PAT (Basic)是含有空格的字符串,所以我们不能通过cin输入,只能通过getline输入这个字符串。然后遍历字符串,如果字符在A-Z之间,就将其变为int类型-64,如果在a-z之间,就将其变为int类型-96.否则我们就跳过。将这些int类型的数据加和得到一个s...原创 2020-05-05 23:38:42 · 138 阅读 · 0 评论 -
PTA刷题Basic篇——1058.组合数的求和——Day(28)
题目描述求给出数字的所有二位组合形式的总和。题目分析我想有的朋友一定会想着用一个二次循环,依次遍历每个数字及其后面的数字并作加和。但是这样的方法比较麻烦而且时间复杂度为O(n^2).这里说一种在输入时就可以解决不需要遍历也不需要开辟新的内存空间的方法。我们知道每个数字都会作为十位和个位,所以每个数字都会乘以11.而且每个数字都会与其他的一个数字组合成一个两位数,所以每个数字的组合数目就...原创 2020-05-05 15:31:02 · 366 阅读 · 0 评论