
PAT
一个大番茄z
Il n'ya qu'un héroïsme au monde : c'est de voir le monde tel qu'il est et de l'aimer.
展开
-
PAT (Basic Level) Practice (中文) 1090 危险品装箱 (25 分)
原题链接具体解释请见代码注释代码:#include <iostream>#include <vector>#include <map>using namespace std;int main(){ int n,m; cin>>n>>m; map<int,int> mapp; // 记录危险品名单 map<int,vector<int>> list; // 为每个危险原创 2022-03-08 21:41:21 · 270 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1080 MOOC期终成绩 (25 分)
原题1080 MOOC期终成绩 (25 分)代码#include <iostream>#include <vector>#include <algorithm>#include <map>#include <utility>using namespace std;struct num{ int g1=-1,g2=-1,g3=-1; int getNum(){ if(g1>=200) {原创 2021-03-11 17:28:51 · 105 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1075 链表元素分类 (25 分)【测试点4】
测试点4 有废数据原创 2021-03-10 17:03:28 · 330 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1074 宇宙无敌加法器 (20 分)【详细思路】
原题1074 宇宙无敌加法器 (20 分)思路这题看起来复杂,但是如果方法选的好的话还是可以处理的很好的。自己在debug的过程中看了很多篇blog,还是觉得柳神的代码写的最好。这里来简单分析一下这一题的思路和要点:首先要做的是补长。如果出现长度不一样的情况的话后面的处理会更加麻烦,所以直接在最开始就给两个数字前面补0到和s一样长,这样就避免了后面的分类讨论处理。在做加法的时候其实和以前做的一些大数加法操作差不多。从后往前处理,每次都要先算一个mod,也就是题目中说的“进制”,用两数相加然后原创 2021-03-10 15:55:28 · 122 阅读 · 1 评论 -
PAT (Basic Level) Practice (中文)1070 结绳 (25 分)【easy】
原题1070 结绳 (25 分)思路这道题看着复杂,其实分析清楚之后处理起来很简单,而且没有坑!是我最喜欢的题目类型了。称最终的对折过多次的绳子为“结绳”,称普通绳子为“绳子”。分析得,前两个进入“结绳”的绳子对折次数是最多的,为n-1次,其余绳子递减,最后一根绳子仅对折一次。即,在最后的“结绳”长度中:a[1]'=a[1]^n-1^ ,a[2]'=a[2]^n-1^ ,a[3]'=a[3]^n-2^ ,a[i]'=a[I]^n-i+1^。得到结论:短绳应该先进入,最长的放最后面。代码处理原创 2021-03-09 21:02:05 · 144 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1060 爱丁顿数 (25 分)【思路&极简代码】
原题1060 爱丁顿数 (25 分)思路1、降序排列2、找到一个符合a[i]>i的i的最大值小坑之前一直以为,可以骑车公里数是大于等于E,然后有一半的测试点过不去,结果想了好一会才发现是大于。题目没读清楚,自己把自己坑惨了。自认为处理思路还是可以的,简单明了。P.S. 数组从1开始计数,方便思考;而max_id的初值是0,避免E=0出错。代码#include <iostream>using namespace std;int main(){ int n;原创 2021-03-07 21:06:09 · 134 阅读 · 1 评论 -
PAT (Basic Level) Practice (中文)1055 集体照 (25 分)【easy】
原题1055 集体照 (25 分)解析很简单,设置了一个flag让他在±1之间变化,然后利用list的push_back和push_front添加元素即可。代码#include <iostream>#include <vector>#include <list>using namespace std;struct stu{ string name; int h;};bool myCmp(stu s1, stu s2){ i原创 2021-03-07 15:59:31 · 130 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1054 求平均值 (20 分)【测试点2+测试用例】
原题1054 求平均值 (20 分)解析这道题是有点坑的。一开始我有一个测试点二一直过不了,然后就一直添加对数字的判断条件,结果最后发现是The average of 1 number is Y没有s,但是The average of 0 numbers is Undefined又是有s的…= =在测试过程中也想出了很多之前没想到的特例,我在这里给出一些供大家参考。常规的有:aaa,1.999,1.1.1.,-,-.,--,..,8-,`.8我的夭寿代码#include <iostr原创 2021-03-07 14:51:32 · 516 阅读 · 1 评论 -
PAT (Basic Level) Practice (中文)1051 复数乘法 (15 分)【测试点2,3】
原题1051 复数乘法 (15 分)解析虽然是一个小小的15分题,但是还是值得记录一下。因为这个点以前从没遇到过,也不容易发现:由于大于-0.005且小于0的double小数在最后会被四舍五入输出0.00,但同时又被判定成负数,所以最后的输出结果会变成-0.00。这显然是不符合要求的。所以处理办法就是将这样的数全部置0,避免输出符号。修改过后即可通过测试点2,3。P.S. 复数的指数形式的乘法只需要模长相乘幅角相加即可,最后通过三角函数转换为一般形式。代码#include <iost原创 2021-03-07 10:57:22 · 168 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1048 数字加密 (20 分)【太坑了啊】
原题1048 数字加密 (20 分)解析这道题原本是不难的,但就是实在是题目描述的不好。正确做法是,当给出的b比a短的时候,需要在b前面补0;而在结果的开头有0时则无需处理。代码#include <iostream>#include <stack>using namespace std;int main() { string a, b; cin >> a >> b; stack<char> s;原创 2021-03-06 15:56:29 · 133 阅读 · 4 评论 -
PAT (Basic Level) Practice (中文)1045 快速排序 (25 分)【测试点2 格式错误】
原题1045 快速排序 (25 分)解析最直接的做法,每次对两边的所有数字进行大小判断,很容易想到,但也必然是会超时的。所以我们要减少比较的次数。我的做法是,提前将每个数两边的最大最小值都先算好存起来,之后每个数都只要跟这两个最大最小值进行比较即可,节省了很多时间。测试点2 格式错误看了老半天没发现错误在哪,结果随便在末尾加了个换行居然过了…= =坑啊!代码#include <iostream>#include <vector>using namespace s原创 2021-03-06 14:17:07 · 226 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1044 火星数字 (20 分)【测试点2,4】
原题1044 火星数字 (20 分)分析这道题的处理并不是很简单的。首先,在读入数据的时候就要认识到,需要读入的是一行,要考虑空格的读入。所以不能用简单的cin,而是要像这样getline(cin, s[i]);使用getline函数。但是使用getline的时候又会有一个小坑,那就是要先把第一行的换行符给处理掉,不然会少读入一个数据。然后在处理输入数字时麻烦一些,需要考虑多种情况,不然会出现格式错误。处理火星文时相对简单,请看代码。测试点2,4这里需要注意的是,如果出现的是类似于“26”这原创 2021-03-06 11:08:34 · 373 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1040 有几个PAT (25 分)
原题1040 有几个PAT (25 分)代码#include <iostream>using namespace std;int main(){ string s; cin>>s; int p=0,t=0,sum=0; for(int i=0;i<s.size();i++){ if(s[i]=='T') ++t; } for(int i=0;i<s.size();i++){ if(s原创 2021-03-05 19:56:59 · 96 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1037 在霍格沃茨找零钱 (20 分)
原题1037 在霍格沃茨找零钱 (20 分)代码#include <iostream>using namespace std;struct money{ int g,s,k; void toK(){ s+=g*17; k+=s*29; g=0; s=0; } void toNormal(){ s=k/29; k=k%29; g=s/17;原创 2021-03-05 14:24:45 · 155 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1035 插入与归并 (25 分)【测试点6 归并】
原题1035 插入与归并 (25 分)思路不需要模拟两种排序方式来进行一步步的对比。首先,我们根据归并排序的特征可以很明显的区分开插排和归并排序,做法是将“每两个连续的数字都是有序的”作为归并排序的判断依据。因为只要执行了一次归并排序的数列都会有这个特征。将两种排序区分开之后就很好处理了。插排做法插排就进行下一次的插入。做法是在数列中找到一个小于前数的数,将它插到“合适”的位置,即大于前数小于后数。归并做法归并排序则稍麻烦一点,需要确定此时给出数列已经排序了的步长,然后将步长翻倍,用stl原创 2021-03-05 12:07:38 · 263 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1033 旧键盘打字 (20 分)
#include <iostream>#include <vector>using namespace std;int main(){ char c; vector<char> v; bool flag=0; while((c=getchar())!='\n'){ if(c=='+') flag=1; v.push_back(c); } string s; cin>>原创 2021-03-04 20:07:29 · 144 阅读 · 1 评论 -
PAT (Basic Level) Practice (中文)1032 挖掘机技术哪家强 (20 分)
能过就行哈,别多纠结了。记得数组给他整大点。#include <iostream>using namespace std;int main(){ int n; cin>>n; int a[999999]; int index=0,max=0; for(int i=0;i<n;i++){ int t,cnt; cin>>t>>cnt; a[t]+=cnt;原创 2021-03-04 19:50:08 · 100 阅读 · 1 评论 -
PAT (Basic Level) Practice (中文)1030 完美数列 (25 分)【测试点4超时&测试点5】
原题给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。输入格式:输入第一行给出两个正整数 N 和 p,其中 N(≤105 )是输入的正整数的个数,p(≤109 )是给定的参数。第二行给出 N 个正整数,每个数不超过 109 。输出格式:在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。输入样例:10 82 3 20 4 5原创 2021-03-04 13:46:11 · 484 阅读 · 3 评论 -
PAT (Basic Level) Practice (中文)1028 人口普查 (20 分)【测试点3、4】
原题某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。输入格式:输入在第一行给出正整数 N,取值在(0,105 ];随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按 yyyy/mm/dd(即年/月/日)格式给出的生日。题目原创 2021-03-01 21:07:23 · 298 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1027 打印沙漏 (20 分)
题目链接ac代码:#include <iostream>using namespace std;int main(){ int N; char c; cin>>N>>c; if(N==0){ cout<<0; return 0; } int n=1; int line=1; while(n<=N){ if(n+(line*2+1)*2&原创 2021-02-20 21:30:44 · 116 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1023 组个最小数 (20 分)【测试点】
原题给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。现给定数字,请编写程序输出能够组成的最小的数。输入格式:输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个非 0 的数字。输出格式:在一行中输出能够组成的最原创 2021-02-07 23:07:47 · 413 阅读 · 4 评论 -
PAT (Basic Level) Practice (中文)1022 D进制的A+B (20 分)【测试点2,3,4】
原题:输入两个非负 10 进制整数 A 和 B (≤230 −1),输出 A+B 的 D (1<D≤10)进制数。输入格式:输入在一行中依次给出 3 个整数 A、B 和 D。输出格式:输出 A+B 的 D 进制数。输入样例:123 456 8输出样例:1103代码:#include <iostream>#include <stack>using namespace std;int main(){ int a,b,d; cin&原创 2021-02-07 22:17:43 · 512 阅读 · 1 评论 -
PAT (Basic Level) Practice (中文)-1019 数字黑洞 (20分)
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。例如,我们从6767开始,将得到7766 - 6677 = 10899810 - 0189 = 96219621 - 1269 = 83528532 - 2358 = 61747641 - 1467 = 6174… …现给定任意 4原创 2020-12-22 11:01:28 · 239 阅读 · 2 评论 -
PAT (Basic Level) Practice (中文)-1018 锤子剪刀布 (20分)
题目链接大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。输入格式:输入第 1 行给出正整数 N(≤105 ),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。输出格式:输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以原创 2020-12-12 16:56:23 · 157 阅读 · 2 评论 -
PAT (Basic Level) Practice (中文)-1016 部分A+B (15分)
题目链接正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA组成的新整数 PA 。例如:给定 A=3862767,DA=6,则 A 的“6 部分”PA是 66,因为 A 中有 2 个 6。现给定 A、DA 、B、DB ,请编写程序计算 PA +PB。输入格式:输入在一行中依次给出 A、DA 、B、DB ,中间以空格分隔,其中 0<A,B<1010 。输出格式:在一行中输出 PA+PB的值。输入样例 1:3862767 6 1353原创 2020-12-09 16:17:43 · 104 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)-1015 德才论 (25分)
题目链接宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”现给出一批考生的德才分数,请根据司马光的理论给出录取排名。输入格式:输入第一行给出 3 个正整数,分别为:N(≤105),即考生总数;L(≥60),为录取最低分数线,即德分和才分均不低于 L 的考生才有资格被考虑录取;H(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,原创 2020-12-09 01:02:24 · 88 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)-1014-福尔摩斯的约会 (20分)
题目链接大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2 对相同的字符是 E ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、以及大写字母 A 到 N原创 2020-12-08 00:35:27 · 104 阅读 · 2 评论 -
PAT (Basic Level) Practice (中文)-1013-数素数 (20分)
题目链接令 Pi表示第 i 个素数。现任给两个正整数 M≤N≤104 ,请输出 PM到 PN的所有素数。输入格式:输入在一行中给出 M 和 N,其间以空格分隔。输出格式:输出从 PM到 PN的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。输入样例:5 27输出样例:11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 8997 101 103#include <iostream原创 2020-12-07 23:05:41 · 105 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)-1011-A+B 和 C (15分)
题目链接给定区间 [−231, 231 ] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。输入格式:输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。输出格式:对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。输入样例:41 2 32 3 42147483647原创 2020-12-06 10:46:26 · 112 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)-1010-一元多项式求导 (25分)
题目链接设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1 。)输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0。输入样例:3 4 -5 2 6 1 -2 0输出样例:12 3 -10 1 6 0#include <iostream>原创 2020-12-06 10:30:51 · 96 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)-1009-说反话 (20分)
题目链接给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。输出格式:每个测试用例的输出占一行,输出倒序后的句子。输入样例:Hello World Here I Come输出样例:Come I Here World Hello#include <iostre原创 2020-12-06 00:29:23 · 189 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)-1008-数组元素循环右移问题 (20分)
题目链接一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0 A1 ⋯AN−1 )变换为(AN−M ⋯AN−1 A0 A1 ⋯AN−M−1 )(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式:每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。输出格式:在一行中输原创 2020-12-05 23:47:17 · 143 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)-1007-素数对猜想 (20分)
题目链接让我们定义dn 为:dn=pn+1 −pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N(<10^5 ),请计算不超过N的满足猜想的素数对的个数。输入格式:输入在一行给出正整数N。输出格式:在一行中输出不超过N的满足猜想的素数对的个数。输入样例:20输出样例:4#include <iostream>#include <vector>原创 2020-12-05 15:39:59 · 542 阅读 · 0 评论 -
PAT (Basic Level) Practice-1003-我要通过!(20分)
PAT (Basic Level) Practice-乙等-1003-我要通过!(20分)“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;如果 aPbTc 是正确的,那么 aP原创 2020-12-05 14:06:01 · 154 阅读 · 1 评论 -
PAT (Basic Level) Practice -1006-换个格式输出整数 (15分)
1006 换个格式输出整数 (15分)让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12…n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234,因为它有 2 个“百”、3 个“十”、以及个位的 4。输入格式:每个测试输入包含 1 个测试用例,给出正整数 n(<1000)。输出格式:每个测试用例的输出占一行,用规定的格式输出 n。输入样例 1:234输出样例 1:BBSSS1234输入样原创 2020-12-05 14:06:15 · 130 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)-1004-成绩排名 (20分)
题目链接读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。输入格式:每个测试输入包含 1 个测试用例,格式为第 1 行:正整数 n第 2 行:第 1 个学生的姓名 学号 成绩第 3 行:第 2 个学生的姓名 学号 成绩… … …第 n+1 行:第 n 个学生的姓名 学号 成绩其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。输出格式:对每个测试用例输出 2原创 2020-12-05 14:05:26 · 97 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)-1001-害死人不偿命的(3n+1)猜想 (15分)
题目链接卡拉兹(Callatz)猜想:对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数原创 2020-12-05 14:05:53 · 80 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)- 1005-继续(3n+1)猜想 (25分)
题目链接卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 5、8、4、2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关键数”,如果 n 不能被数列中的其他原创 2020-12-05 14:05:04 · 139 阅读 · 3 评论