PTA团体程序设计天梯赛L1真题讲解L1-077-080

发布时间:2026/8/15 22:29:46
PTA团体程序设计天梯赛L1真题讲解L1-077-080 官网https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7文章目录L1-077 大笨钟的心情L1-078 吉老师的回归L1-079 天梯赛的善良L1-080 乘法口诀数列L1-077 大笨钟的心情题目大意输入24个整数对应一天中0 ~ 23点每个小时的心情指数。随后有多组询问每次给出一个时间点若时间合法在0~23范围内则判断对应心情指数大于50输出“指数 Yes”否则输出“指数 No”若时间不合法直接结束程序。核心思路用长度为24的数组存储每个小时的心情指数下标直接对应小时数。随后循环读取询问的时间值先判断是否在合法区间内合法则根据数组对应值判断输出结果不合法则直接终止循环结束程序。正解代码#includebits/stdc.husingnamespacestd;intmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);inta[24];for(inti0;i24;i){cina[i];}intx;while(cinx){if(x0x23){if(a[x]50)couta[x] Yesendl;elsecouta[x] Noendl;}elsereturn0;}return0;}代码实现要点数组下标与小时一一对应输入时直接按顺序存入a[0]到a[23]。使用while(cin x)持续读取输入自动处理多组询问。判断条件为a[x] 50等于50时输出No。遇到非法时间直接退出程序无需处理该输入。L1-078 吉老师的回归题目大意给定n道题目的题面字符串吉老师按顺序看题跳过所有包含小写字符串qiandao或easy的题目区分大小写只做其余题目。已知吉老师已经做完了m道要做的题求他当前正在做的题目的题面如果所有要做的题都做完了输出Wo AK le。核心思路遍历所有n道题目筛选出所有**不包含qiandao且不包含easy**的题目按顺序存入列表这些是吉老师会做的题。统计可做题目的总数cnt若cnt ≤ m说明吉老师已经做完了所有可做题目输出Wo AK le若cnt m说明还有题可做做完m道后正在做的是列表中下标为m的题目直接输出该题面即可。正解代码#includeiostream#includevector#includestringusingnamespacestd;intmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);intn,m;cinnm;cin.ignore();vectorstringa;intcnt0;while(n--){string s;getline(cin,s);if(s.find(qiandao)string::nposs.find(easy)string::npos){a.push_back(s);cnt;}}if(cntm){coutWo AK le;}else{if(mcnt){for(intim;icnt;i){if(icnt-1)couta[i];elsecouta[i]endl;}}}return0;}代码实现要点使用string::find()函数判断子串是否存在若返回string::npos说明不包含该子串。由于cin n m后会残留换行符需要用cin.ignore()消耗换行避免后续getline读取到空行。筛选题目时按输入顺序存储保证做题顺序正确。L1-079 天梯赛的善良题目大意给定n个参赛学生的能力值分别输出能力值的最小值及其出现次数、最大值及其出现次数。核心思路遍历所有能力值同步完成三个任务更新当前最小值、更新当前最大值、统计每个能力值的出现次数。遍历完成后直接通过最值从计数中取出对应次数按格式输出即可。可以使用map或数组完成计数也可以在遍历时专门维护最小值计数、最大值计数实现方式灵活。正解代码#includebits/stdc.husingnamespacestd;constintN2e49;inta[N];intmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);mapint,intmp;intn,ma-1,mi1e7;cinn;for(inti0;in;i){cina[i];mp[a[i]];mimin(mi,a[i]);mamax(ma,a[i]);}coutmi mp[mi]endl;coutma mp[ma]endl;return0;}代码实现要点初始化最小值为一个足够大的数如1e9最大值为一个足够小的数如-1保证第一个数必然能更新最值。使用mapint, int统计次数每读入一个数就对应计数加1同时更新最值。输出分两行第一行最小值次数第二行最大值次数数字间用空格分隔。注意事项若所有数都相同则最小值和最大值相等两次输出的结果也会相同逻辑上无需特殊处理。能力值范围不大时也可用数组计数效率更高使用map写法更简洁通用。L1-080 乘法口诀数列题目大意给定两个1位数字a1、a2作为数列前两项按照规则生成数列依次取相邻两项相乘将乘积的每一位数字按顺序追加到数列末尾。输出数列的前n项。核心思路用数组存储数列前两项初始化为a1、a2。依次遍历每一对相邻数字计算乘积后拆分为单个数字逐个追加到数组末尾直到数组长度达到n停止。乘积拆分规则若乘积是两位数先放十位再放个位若是一位数直接放入。每放入一个数字都要检查是否已经达到n项避免越界。正解代码#includebits/stdc.husingnamespacestd;intmain(){inta1,a2,n;cina1a2n;intb[1001]{a1,a2};// 初始化前两个数couta1 a2;// 先输出前两个for(inti2,j2;injn;i){intcb[i-1]*b[i-2];// 计算乘积if(c10){// 拆分成两位数if(jn)b[j]c/10;if(jn)b[j]c%10;}else{// 直接放入if(jn)b[j]c;}}// 输出结果前n个for(inti2;in;i){cout b[i];}return0;}代码实现要点数组大小需足够容纳n项一般开1000以上即可满足常规数据范围。拆分两位数时使用c / 10取十位、c % 10取个位保证顺序正确。每次追加数字前都判断是否已达到n项确保不会填充超过n个元素也避免数组越界。输出时控制空格格式首尾无多余空格。

相关新闻