写在前面:PAT冬季赛马上就要开始了!这一次先报一个乙级冲鸭!我感Jio乙级里面还是有蛮多水题的,也有些题虽然看上去是水题,但是真正用代码实现起来的话会卡你那么一下。
输入两个非负10进制整数A和B(<=230-1),输出A+B的D(1 输入在一行中依次给出3个整数A,B和D。 输出A+B的D进制数。 1234568输出样例:1103解题思路:首先,这道题看上去很简单,但是用代码实现起来发现有点难受啊。幸亏数据结构没白学,我用了一个堆栈。先令C=A+B如果C等于0,就直接输出0,否则对C进行进制转换。这道题主要考察的应该就是将十进制的C转换成D进制。先把C对D的余数推入栈中,然后C除以D的值赋给C,最后根据堆栈“后进先出”的规则输出C对D的余数,也就得到了D进制下的C。 1#include 输入第1行给出正整数T(<=10),是测试用例的个数。随后给出组测试用例,每组占一行,顺序给出A,B和C.整数间以空格分隔。 对每组测试用例,在一行中输出“Case#X:true”如果A+B>C,否则输出“Case#X:false”,其中X是测试用例的编号(从1开始)。 41232342147483647021474836460-2147483648-2147483647输出样例:Case#1:falseCase#2:trueCase#3:trueCase#4:false解题思路:首先看到这道题给定的区间是[-2的31次方,2的31次方],直接无脑用Python的。这段代码中最秀的地方就是这个a,b,c=map(int,input().split())啦!map()函数的用法如下:map(func,[seq1,seq2,...])第一个参数接受一个函数名,后面的参数接受一个或多个可Python的函数编程中的map()函数是将FUNC作用于SEQ中的每一个元素,并将所有的调用的结果作为一个列表返回。 1t=eval(input())2foriinrange(1,t+1):3a,b,c=map(int,input().split())4ifa+b>c:5print("Case#{}:true".format(i))6else:7print("Case#{}:false".format(i))3.查验身份证(15分)题目描述:一个合法的身份证号码由17位地区,日期编号和顺序编号加1位校验码组成校验码的计算规则如下:首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z者除外;最后按照以下关系对应值与校验码M的值:Z:012345678910M:10X98765432现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。 输入第一行给出正整数N(<=100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。 按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出“Allpassed”。 432012419880824005612010X19890101123411010819671130186637070419881216001X输出样例:12010X19890101123411010819671130186637070419881216001X解题思路:首先,这个题目看起我有点懵逼,真的题目都看了3,4遍。好好缕了下思路之后,先建立俩个数组分别用来存放权值分配和校验码M.然后取消cin与stdin的同步压压惊,真的怕TLE,毕竟要对若干个18位数的身份证每一位进行校验。立个flag=true,如果到最后,标志还是为true,表明所有的身份证号码都正常,输出“Allpassed”。然后isTrue用来判断每一个身份证号的前17位是否全为数字,若不是数字则isTrue和flag都变成false,用sum来计算身份证号号的每一位数和它所占的权值的乘积之和,将计算出来的总和对11取模得到值Z,根据题意可知,可以根据z值来找到对应的校验码中号的值,若IsTrue运算为真但校验码中号和身份证最后一位不相等,这个身份证号也是错误的,需要对错误的身份证号进行输出。 1#include A1=能被5整除的数字中所有偶数的和;A2=将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...;A3=被5除后余2的数字的个数;A4=被5除后余3的数字的平均数,精确到小数点后1位;A5=被5除后余4的数字中最大数字。 每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数。数字间以空格分隔。 对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。 若其中某一类数字不存在,则在相应位置输出'N'。 1312345678910201618输出样例:301129.79解题思路:首先,根据题意可知这是一道水题,真的水得不能再水了,直接按着题目来就求A1,A2,A3,A4,A5就行啦,整除5的时候可以用switch,但是我用的的if-else。 输入在一行中给出M和N,其间以空格分隔。 输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。 1#include 输入第1行给出正整数N(<=105),即双方交锋的次数。随后行,每行给出一次交锋的信息,即甲,乙双方同时给出的的手势.C代表“锤子“,J代表‘剪刀’,B代表‘布’,第1个字母代表甲方,第2个代表乙方,中间有1个空格。 输出第1,2行分别给出甲,乙的胜,平,负次数,数字间以1个空格分隔。第3行给出两个字母,分别代表甲,乙获胜次数最多的手势,中间有1个空格。如果解不唯一,则输出按字母序最小的解。 10CJJBCBBBBCCCCBJBBCJJ输出样例:532235BB解题思路:首先通过题意可知这是一道代码量很大的水题。它不仅需要记录甲乙胜负平的次数,而且需要记录甲乙获胜的手势,然后通过比较来找出获胜最多的手势,在不唯一的情况下输出字母序最小的解。 每个输入包含1个测试用例,即一个不超过1000位的正整数N。 对N中每一种不同的个位数字,以d:M的格式在一行中输出该位数字d及其在N中出现的次数M.要求按d的升序输出。 100311输出样例:0:21:33:1解题思路:首先,根据题意可知这是一道水题,那么问题来了,怎么在写水题的同时秀一波操作呢?额,我用一个map 1#include 每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0,数字1,......数字9的个数。整数间用一个空格分隔0.10个数字的总个数不超过50,且至少拥有1个非0的数字。 在一行中输出能够组成的最小的数。 2200030010输出样例:10015558解题思路:首先,根据题意可知这是一道水题,第一位数输出非0的最小值,然后后面的位数直接依次把身下的数字中的最小值输出,输出的结果就是最小数。 输入在一行中顺序给出2个整数C1和C1。注意两次获得的时钟打点数肯定不相同,即C1 1#include 输入在第一行给出正整数N,取值在(0,105);随后N行,每行给出1个人的姓名(由不超过5个英文字母组成的字符串),以及按“yyyy/MM/DD”(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。 在一行中顺序输出有效生日的个数,最年长人和最年轻人的姓名,其间以空格分隔。 5John2001/05/12Tom1814/09/06Ann2121/01/30James1814/09/05Steve1967/11/20输出样例:3TomJohn解题思路:首先,根据题意可知这个人口普查其实就是2个变量而已嘛,一个name,一个birthday,那就直接建立一个person结构体好了。然后根据题目要求这个岛上的人生日在1814/09/06至2014/09/06这个范围内,接下来直接用for循环对输入进行遍历来求解在这个范围内的有效生日并找出最年长和最年轻的人所在的下标就好了。然而!我第一次提交的时候有个测试用例WA了,找了N久之后终于发现当有效个数为0时,后面不能够输出多余的空格。 1#include 输入在2行中分别给出应该输入的文字,以及实际被输入的文字。每段文字是不超过80个字符的串,由字母AZ(包括大,小写),数字0-9,以及下划线“_”(代表空格)组成。题目保证2个字符串均非空。 按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有1个坏键。 7_This_is_a_test_hs_s_a_es输出样例:7TI解题思路:首先,根据题意脑子里冒出一句话“Lifeisshort,usepython!”用for循环来遍历应该输入的蚊子,如果一个字符是应该输入的但实际上未被输入,就用upper()把这个字符转换成大写形式存入bad_key这个列表中,接下来就是对bad_key这个列表去重输出。先利用set()来对bad_key()进行去重,然后再用list()将bad_key()转换回列表,在完成这个去重操作的同时,用sorted()函数来保留bad_key原有的顺序,最后用join把bad_key中所有的元素添加到一个空字符串中进行输出。 1s,a=input(),input()2bad_key=[i.upper()foriinsifinotina]3print("".join(sorted(list(set(bad_key)),key=bad_key.index)))12.旧键盘打字(20分)题目描述:旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样? 输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过10^5个字符的串。可用的字符包括字母[a-z,A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。注意:如果上档键坏掉了,那么大写的英文字母无法被打出。 在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。 7+IE.7_This_is_a_test.输出样例:_hs_s_a_tst解题思路:首先,看完题目之后发现它和上一题很相似,还是那句话“Lifeisshort,usepython!”虽然思路也很简单,但是!这次的代码有点长啊,我是先把bad_key里面所有的大写字母都转换成小写字母,转换的同时在打印结果result中删去坏键。如果bad_key里面有'+'号,则说明上档键是坏的,无法输出大写字母,所以当strinput中的字符是大写且上档键是坏的时,就将这个大写的坏键在打印结果result中删去,最后输出能打印出来的字符。 1badKey,strinput=input(),input()2result=strinput3foriinbadKey:4ifbadKey.isupper():#如果坏键是大写字母,则替换成小写字母5result=result.replace(i.lower(),"")6result=result.replace(i,"")#坏键字符全部从打印结果中删去7ifbadKey.find('+')>-1:#如果含有上档键8foriinset(list(result)):#把预期打印结果转换成set去重,再进行大写字母的查找9ifi.isupper():#若找到大写字母,就把它从打印结果中删去10result=result.replace(i,"")11print(result)13.跟奥巴马一起编程(15分)题目描述:美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧! 输入在一行中给出正方形边长N(3<=N<=20)和组成正方形边的某种字符C,间隔一个空格。 输出由给定字符画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。 10a输出样例:aaaaaaaaaaaaaaaaaaaaaaaaaa解题思路:首先,根据题意可知行数是列数的50%(四舍五入取整),输入的边长也就是col列数,然后利用round()函数来四舍五入求row行数,接着利用for循环嵌套,在第一行、最后一行输出字符c,在中间行的第一列和最后一列输出字符c,其余位置输出空格。 1#include 注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖出全部15万吨第2种月饼、以及5万吨第3种月饼,获得72+45/2=94.5(亿元)。 每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N表示月饼的种类数、以及不超过500(以万吨为单位)的正整数D表示市场最大需求量。随后一行给出N个正数表示每种月饼的库存量(以万吨为单位);最后一行给出N个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。 对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后2位。 320181510757245输出样例:94.50解题思路:首先,通过题意可知月饼有3个变量:库存量,总售价,单价。所以,先建一个含有这3个变量的moonCake结构体,然后依次输入月饼的种类数、需求量,每种月饼的库存量和总售价。在算出月饼的单价之后,根据单价从高到低用sort来对月饼进行排序。最后通过需求量和月饼的库存量大小的比较来求利润。 1#include 输入只有一行,包含一个字符串,长度不超过105,只包含P,A,T三种字母。 在一行中输出给定字符串中包含多少个PAT。由于结果可能比较大,只输出对1000000007取余数的结果。 APPAPT输出样例:2解题思路:首先,这个题看完之后有点懵逼,然后仔细分析得出这三点:①每个甲对应的PA组合数量是甲之前P的数量;②每个对应的PAT组合数量是之前所有甲对应的PA组合数量的累加;③所有的PAT组合数量是所有对应的PAT组合数量的累加。 1#include 输入在第1行给出不超过105的正整数N,即学生总人数。随后一行给出N名学生的百分制整数成绩,中间以空格分隔。最后一行给出要查询的分数个数K(不超过N的正整数),随后是K个分数,中间以空格分隔。 在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。 10607590557599829075503759088输出样例:320解题思路:首先看完题目之后,第一反应就是这是水题,只需要建立一个map来存放学生的分数并且统计每个分数有多少人就行了,map建立出来了之后按题目要求输出,就可以看下一道题了。 1#include 每个测试输入包含1个测试用例,格式为 第1行:正整数n第2行:第1个学生的姓名学号成绩第3行:第2个学生的姓名学号成绩.........第n+1行:第n个学生的姓名学号成绩其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。输出格式:对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低学生的姓名和学号,字符串间有1空格。 3JoeMath99011289MikeCS991301100MaryEE99083095输出样例:MikeCS991301JoeMath990112解题思路:首先看完题目之后,建立一个vector来对学生的信息进行存储,利用sort函数根据学生分数降序来对学生进行排序,输出成绩最高和最低的学生信息即可。 1#include 输入第一行给出一个正整数N(≤1000),随后N行,每行给出一个考生的信息:准考证号试机座位号考试座位号。其中准考证号由14位数字组成,座位从1到N编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。 考生信息之后,给出一个正整数M(≤N),随后一行中给出M个待查询的试机座位号码,以空格分隔。 对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用1个空格分隔。 41012015091223324101201509121194110120150912126131012015091200232234输出样例:101201509120022101201509121191解题思路:首先看完题目之后,建立一个vector来对学生的信息进行存储,利用sort函数根据学生试机座位号升序来对学生进行排序,对vector进行遍历找到要查找的试机座位号,输出学生的准考证号和考试座位号即可。 1#include 输入在第一行中给出一个正整数N(≤10000)。随后N行,每行按下列格式给出: IDxy其中ID是运动员的编号(由4位数字组成);x和y是其打出的弹洞的平面坐标(x,y),均为整数,且0≤|x|,|y|≤100。题目保证每个运动员的编号不重复,且每人只打1枪。 输出冠军和菜鸟的编号,中间空1格。题目保证他们是唯一的。 30001571020-1302330-1输出样例:02330001解题思路:首先,看完题目就可以知道,这跟前面的俩道题几乎是用了同一个答题模板。建立一个vector来对运动员的信息进行存储,利用sort函数根据弹孔离靶心距离来对运动员进行排序,最后输出冠军和菜鸟即可。AC代码:1#include 每个测试输入包含1个测试用例,给出正整数n(<1000)。 每个测试用例的输出占一行,用规定的格式输出n。 234输出样例1:BBSSS1234输入样例2:23输出样例2:SS123解题思路:首先,通过这个题目的输入输出样例可知,输入的数字n的百位数是多少就输出多少个'B',十位数是多少就输出多少个'S',个位数是多少就从1开始一直输出到这个数为止。AC代码:1#include 输入在一行中给出一个长度不超过1000的字符串。字符串由ASCII码表中任意可见字符及空格组成,至少包含1个英文字母,以回车结束(回车不算在内)。 在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。 ThisisasimpleTEST.ThereAREnumbersandothersymbols1&2&3...........输出样例:e7解题思路:首先看完题目之后,脑子里冒出一句话“人生苦短....”这题涉及到了字符串的大小写转换、字母出现次数的统计和字符大小比较,果断用Python写。第一行操作很骚,input().split()是把用户输入以空格为分隔符存入一个列表里面,然后利用"".join()把刚刚生成的列表中的所有元素存入字符串中,最后再用一个lower()来把字符串的所有大写字母转换成小写。输入解决了,接下来的事也很简单,遍历字符串s中的所有元素,如果这个字符是字母就判断它的出现次数是否最频繁,如果有出现次数一样频繁的多个字符,则输出字母序最小的那一个。 1s=("".join(input().split())).lower()2max_count=03foriins:4ifi.isalpha():5ifs.count(i)>max_count:6max_count=s.count(i)7max_char=i8elifs.count(i)==max_count:9ifi 输入在第一行给出两个不超过100的正整数N和M,分别是学生人数和判断题数量。第二行给出M个不超过5的正整数,是每道题的满分值。第三行给出每道题对应的正确答案,0代表“非”,1代表“是”。随后N行,每行给出一个学生的解答。数字间均以空格分隔。 按照输入的顺序输出每个学生的得分,每个分数占一行。 36213345001011011001101010110011输出样例:131112解题思路:首先看完题目之后,按它的意思来就行了,建立一个数组来存放每道题的分值、建立一个数组来存取正确答案,然后输入每个学生的答案与正确答案一一比较计算出学生的分数进行输出即可。 1#include 输入第一行给出一个正整数N(≤100),随后N行,每行按照编号-答案的格式给出一道题的4个选项,T表示正确选项,F表示错误选项。选项间用空格分隔。 在一行中输出wifi密码。 8A-TB-FC-FD-FC-TB-FA-FD-FA-FD-FC-FB-TB-TA-FC-FD-FB-FD-TA-FC-FA-TC-FB-FD-FD-TB-FC-FA-FC-TA-FB-FD-F输出样例:13224143解题思路:首先看完题目之后,果断用Python,重点是第三行代码,利用字符串中的find函数在输入的字符串s中寻找'T',将find函数的返回int型的值减去2就可以得到这一题正确答案,然而我们还需要调用ord()来把字符转换成ASCⅡ码,减去'A'再加1就可以得到题目所要求的A-1;B-2;C-3;D-4;输出就是WIFI密码。(我自己顺便记一下笔记:ASCⅡ码转成字符是用chr(),字符转ASCⅡ码是用ord(),一开始我直接用int,编译器报错了,然后我百度了一下Python字符和ASCⅡ码间的转换) foriinrange(eval(input())):s=input()print(ord(s[s.find('T')-2])-ord('A')+1,end="")24.小赌怡情(15分)题目描述:常言道“小赌怡情”。这是一个很简单的小游戏:首先由计算机给出第一个整数;然后玩家下注赌第二个整数将会比第一个数大还是小;玩家下注t个筹码后,计算机给出第二个数。若玩家猜对了,则系统奖励玩家t个筹码;否则扣除玩家t个筹码。 注意:玩家下注的筹码数不能超过自己帐户上拥有的筹码数。当玩家输光了全部筹码后,游戏就结束。 输入在第一行给出2个正整数T和K(≤100),分别是系统在初始状态下赠送给玩家的筹码数、以及需要处理的游戏次数。随后K行,每行对应一次游戏,顺序给出4个数字: n1btn2其中n1和n2是计算机先后给出的两个[0,9]内的整数,保证两个数字不相等。b为0表示玩家赌小,为1表示玩家赌大。t表示玩家下注的筹码数,保证在整型范围内。 对每一次游戏,根据下列情况对应输出(其中t是玩家下注量,x是玩家当前持有的筹码量): 1#include 输入给出一个正整数N(2≤N≤104)。 在一行中输出题面中算式取到的不同值的个数。 2017输出样例:1480解题思路:首先看完题目之后,第一想法就是建立一个map来记录不同值,看清题for循环是从1开始遍历的,向下取整用的是floor函数,最后输出map的大小也就是不同值的个数。 1#include 每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。 在一行内输出n的各位数字之和的每一位,拼音数字间有1空格,但一行中最后一个拼音数字后没有空格。 1234567890987654321123456789输出样例:yisanwu解题思路:首先看完题目之后,我先自定义了一个transfer()函数用来将数字转换为拼音。然后根据题目意思来吧。我是用string来存放输入的数字的,然后用for循环将每一个数字取出来累加,算出累加和的个位十位百位分别是多少,然后调用自定义函数来完成转换。值得一提的是,我第一遍写的那段代码有一个测试用例无法通过,因为当sum的十位数是0是会无法输出'ling',比如999999999999这个输入,预期输出应该是"yilingba",然而实际输出是"yiba",知道错误原因之后,把那两个ifif改成if和elseif和else就能通过所有测试用例了。 下面给出甲、乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒。 输入第一行先给出一个正整数N(≤100),随后N行,每行给出一轮划拳的记录,格式为: 甲喊甲划乙喊乙划其中喊是喊出的数字,划是划出的数字,均为不超过100的正整数(两只手一起划)。 在一行中先后输出甲、乙两人喝酒的杯数,其间以一个空格分隔。 58109125105103851212181134161215输出样例:12解题思路:首先看完题目之后,发现这是水题,直接按照题目的意思来,思路见注释。 1#include 例如,我们从6767开始,将得到 7766-6677=10899810-0189=96219621-1269=83528532-2358=61747641-1467=6174......现给定任意4位正整数,请编写程序演示到达黑洞的过程。 输入给出一个(0,104)区间内的正整数N。 如果N的4位数字全相等,则在一行内输出N-N=0000;否则将计算的每一步在一行内输出,直到6174作为差出现,输出格式见样例。注意每个数字按4位数格式输出。 6767输出样例1:7766-6677=10899810-0189=96219621-1269=83528532-2358=6174输入样例2:2222输出样例2:2222-2222=0000解题思路:首先看完题目之后,有一点懵,又看了俩边终于明白题目的意思了。第一步:将输入的数字按照个十百千位来进行非递增排序和非递减排序,第二步:用新生成的那个非递增排序的数减去非递减排序的数,第三步:将第二部得到的差重新进行第一步的操作,直到得到6174为止。若第一步中输入的那个数字个十百千位都相等,差值就输出0000。 1#include 输入在一行中给出一个长度不超过104的、仅由英文字母构成的非空字符串。 在一行中按题目要求输出排序后的字符串。题目保证输出非空。 redlesPayBestPATTopTeePHPereatitAPPT输出样例:PATestPATestPTetPTePePee解题思路:首先看完题目之后,第一反应就是建立一个map来记录每种字符有多少个,然后用while和if来操作,让程序按PATestPATest....这样的顺序输出。若某种字符已经输出完,则余下的字符仍按PATest的顺序打印,直到所有字符都被输出。其实就是按照题目意思来写就行,水题。 1#include 输入在一行中依次给出A和B,中间以1空格分隔。 在一行中依次输出Q和R,中间以1空格分隔。 1234567890509876543217输出样例:176366841501410934743解题思路:首先看完题目之后,这么大个数直接无脑用Python,关于第一行输入的注释在前面的题中提到了这段代码中最秀的地方就是这个a,b,c=map(int,input().split())啦!map()函数的用法如下:map(func,[seq1,seq2,...])第一个参数接受一个函数名,后面的参数接受一个或多个可Python的函数编程中的map()函数是将FUNC作用于SEQ中的每一个元素,并将所有的调用的结果作为一个列表返回。然后整除和求余即可。 1a,b=map(int,input().split())2print(str(a//b)+""+str(a%b))31.挖掘机技术哪家强(20分)题目描述:为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。 输入在第1行给出不超过105的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。 在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。 6365280110027034030输出样例:2150解题思路:首先看完之后的第一想法就是建立一个map,其中map的key值是参赛者所属学校的编号,value值是学校的总分。这里用一个max来记录总分最高的那个学校的编号。嗯,最后直接输出就行了。AC代码:1#include 为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;第2串不能买,因为没有黑色珠子,并且少了一颗红色的珠子。 每个输入包含1个测试用例。每个测试用例分别在2行中先后给出摊主的珠串和小红想做的珠串,两串都不超过1000个珠子。 如果可以买,则在一行中输出Yes以及有多少多余的珠子;如果不可以买,则在一行中输出No以及缺了多少珠子。其间以1个空格分隔。 ppRYYGrrYBR2258YrR8RrY输出样例1:Yes8输入样例2:ppRYYGrrYB225YrR8RrY输出样例2:No2解题思路:首先看完题目之后有点懵啊,莫名其妙就开始慌了。又看了一遍题目之后,决定先建一个map压压惊,用来记录摊主的珠串中不同的珠子的数量。然后按照题意完成输入,在输入摊主珠串的时候记得用map记录每颗珠子的数,在输入小红想要的珠串时,用for循环对珠子进行遍历,如果其中有珠子是map中存在的就可以把它从map中取出来,并让计数器count记录总共取出来多少个。最后看看count和小红想要的珠串长度是否相等,若想等就说明小红可以买下它,输出多出的珠子数;否则说明珠子少了,小红不买它,输出缺少的珠子数。 1#include 例如地球人的数字29翻译成火星文就是helmar;而火星文elonov对应地球数字115。为了方便交流,请你编写程序实现地球和火星数字之间的互译。 输入第一行给出一个正整数N(<100),随后N行,每行给出一个[0,169)区间内的数字——或者是地球文,或者是火星文。 对应输入的每一行,在一行中输出翻译后的另一种语言的数字。 输入在一行中给出长度不超过105、以回车结束的字符串。 在一行中先后输出0的个数和1的个数,其间以空格分隔。 PAT(Basic)输出样例:34解题思路:首先看完题目之后,按着题目意思来吧,先输入一个字符串,然后遍历这个字符串判断其中的字符是不是字母,若是字母,把它转换成小写再去求它在字母表中的序号,将这个序号累加到sum。因为二进制只有0和1,所以没必要建一个map来存放0和1的个数,直接用数组吧,通过memset()函数对数组中的元素进行初始化。然后直接用sum对2求余和整除来转换二进制就行了,最后输出0和1的个数。 1#include 对任何一个正整数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展…… 我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过1000的正整数n,简单地数一下,需要多少步(砍几下)才能得到n=1? 每个测试输入包含1个测试用例,即给出正整数n的值。 输出从n计算到1需要的步数。 3输出样例:5解题思路:看完题就知道这是一道水题,直接判断n的奇偶性,若n为偶数,n=n/2,若n为奇数就n=(3*n+1)/2,每次对n进行赋值的时候,计数器count++就行了,最后输出的count就是结果。AC代码:1#include 给定比赛的最终排名以及一系列参赛者的ID,你要给出这些参赛者应该获得的奖品。 输入第一行给出一个正整数N(≤104),是参赛者人数。随后N行给出最终排名,每行按排名顺序给出一位参赛者的ID(4位数字组成)。接下来给出一个正整数K以及K个需要查询的ID。 对每个要查询的ID,在一行中输出ID:奖品,其中奖品或者是MysteryAward(神秘大奖)、或者是Minion(小黄人)、或者是Chocolate(巧克力)。如果所查ID根本不在排名里,打印Areyoukidding(耍我呢?)。如果该ID已经查过了(即奖品已经领过了),打印ID:Checked(不能多吃多占)。 输入第一行给出三个正整数M(≤1000)、N和S,分别是转发的总量、小明决定的中奖间隔、以及第一位中奖者的序号(编号从1开始)。随后M行,顺序给出转发微博的网友的昵称(不超过20个字符、不包含空格回车的非空字符串)。 注意:可能有人转发多次,但不能中奖多次。所以如果处于当前中奖位置的网友已经中过奖,则跳过他顺次取下一位。 按照输入的顺序输出中奖名单,每个昵称占一行。如果没有人中奖,则输出Keepgoing...。 现给定所有队员的比赛成绩,请你编写程序找出冠军队。 输入第一行给出一个正整数N(≤104),即所有参赛队员总数。随后N行,每行给出一位队员的成绩,格式为:队伍编号-队员编号成绩,其中队伍编号为1到1000的正整数,队员编号为1到10的正整数,成绩为0到100的整数。 在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。 解压方法就是反过来,把形如5c这样的表示恢复为ccccc。 本题需要你根据压缩或解压的要求,对给定字符串进行处理。这里我们简单地假设原始字符串是完全由英文字母和空格组成的非空字符串。 输入第一行给出一个字符,如果是C就表示下面的字符串需要被压缩;如果是D就表示下面的字符串需要被解压。第二行给出需要被压缩或解压的不超过1000个字符的字符串,以回车结尾。题目保证字符重复个数在整型范围内,且输出文件不超过1MB。 根据要求压缩或解压字符串,并在一行中输出结果。 现给定A、DA、B、DB,请编写程序计算PA+PB。