资讯动态

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

发布时间:2026/8/14 21:09:17 来源:尧图企业网站定制
官网https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7文章目录L1-101 别再来这么多猫娘了L1-102 兰州牛肉面L1-103 整数的持续性L1-104 九宫格L1-101 别再来这么多猫娘了题目大意给定若干违禁词、警告阈值和一段待检查文本统计文本中违禁词的出现次数。若次数小于阈值将所有违禁词替换为censored后输出文本若次数大于等于阈值则输出违禁词总数和警告语句。匹配规则为从左到右处理匹配到违禁词后从其末尾继续向后查找不重叠计数。核心思路按输入顺序逐个处理违禁词在文本中滑动匹配子串匹配成功则计数并用特殊字符占位避免后续匹配重叠。最终根据计数结果选择输出替换后的文本或警告信息。算法步骤读取违禁词数量将所有违禁词存入数组。读取阈值使用getline读取完整待检查文本。遍历每个违禁词在文本中逐位滑动匹配若当前位置子串与违禁词相等计数加1并用特殊字符替换该段内容占位。匹配后指针跳到违禁词末尾继续防止重叠匹配。若总计数小于阈值遍历文本普通字符原样输出特殊字符替换为censored输出。若总计数大于等于阈值输出计数与警告语句。正解代码#includebits/stdc.husingnamespacestd;string s,sscensored;vectorstringv;intn,k,cnt;intmain(){cinn;for(inti1;in;i){string s1;cins1;v.push_back(s1);}cink;cin.ignore();getline(cin,s);for(autot:v){intlnt.size();for(inti0;ilns.size();i){if(s.substr(i,ln)t){cnt;s.replace(i,ln,\b);}}}if(cntk){for(inti0;is.size();i)if(s[i]!\b)couts[i];elsecoutss;}else{coutcnt\n;coutHe Xie Ni Quan Jia!;}return0;}代码关键细节读取阈值后必须用cin.ignore()吃掉换行符避免后续getline读入空行。使用特殊字符如退格符临时占位匹配到的违禁词避免直接替换字符串导致长度变化、影响后续匹配位置。违禁词按输入顺序依次处理符合题目要求。L1-102 兰州牛肉面题目大意给定 n 种牛肉面的单价以及若干条销售记录品种编号 碗数遇到编号 0 时输入结束。统计每种牛肉面的总销量和全天总营业额按品种编号顺序输出销量最后输出保留两位小数的总营业额。核心思路用数组按编号存储每种面的单价和销量遍历销售记录累加销量与营业额最后按顺序输出结果。算法步骤读取品种数 n再依次读入 n 种面的单价按下标对应编号存储。初始化销量数组全部为 0。循环读取销售记录当读到0 0时终止循环。每条有效记录累加对应品种的销量同时计算本次金额并加入总营业额。按编号 1 到 n 的顺序逐行输出销量最后输出总营业额保留两位小数。正解代码#includebits/stdc.husingnamespacestd;doublew[110];intmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);intn;cinn;doubleans0;for(inti1;in;i)cinw[i];mapint,intmp;intx,q;for(inti1;in;i)mp[i]0;while(cinxq){if(x0q0)break;mp[x]q;ansq*w[x];}for(autov:mp){coutv.secondendl;}printf(%.2f,ans);return0;}代码关键细节单价与总营业额使用double类型存储保证小数精度。品种编号从 1 开始数组下标与编号一一对应避免越界。输出营业额使用printf(%.2f)格式化自动补零到两位小数。L1-103 整数的持续性题目大意定义整数的持续性反复将该数各位数字相乘直到得到一个个位数所需要的操作步数即为持续性。给定区间 [a, b]找出区间内持续性最长的整数输出最长步数以及所有符合条件的整数按升序排列。核心思路遍历区间内所有整数逐个模拟计算持续性记录最大值和对应的所有数字最后按要求输出。算法步骤编写函数计算单个整数的持续性循环求各位数字的乘积直到数字小于 10统计循环步数。遍历区间 [a, b] 内的每个整数计算其持续性同时更新全局最大持续性。收集所有持续性等于最大值的整数因遍历本身升序结果天然有序。第一行输出最长持续性第二行输出所有符合条件的整数。正解代码#includebits/stdc.husingnamespacestd;constintN2e59;intn,t,ans;vectorpairint,intv;intsxx(intx){intcnt0;while(x9){inttmpx,num1;cnt;while(tmp){num*tmp%10;tmp/10;}xnum;//coutx\n;}returncnt;}intmain(){inta,b,mx0;cinab;for(intia;ib;i){intysxx(i);v.push_back({i,y});mxmax(mx,y);}//coutmx\n;vectorintans;for(autot:v)if(t.secondmx)ans.push_back(t.first);coutmx\n;for(inti0;ians.size();i){coutans[i];if(i!ans.size()-1)cout ;}return0;}代码关键细节计算各位乘积时若某一位为 0乘积直接变为 0下一步即可终止无需继续计算剩余位。区间遍历顺序为从小到大收集的结果自动满足升序要求无需额外排序。L1-104 九宫格题目大意给定多个 9×9 的九宫格判断其是否满足数独规则每行、每列、每个 3×3 小宫格内1~9 每个数字恰好出现一次且数字均在 1~9 范围内。合法输出 1不合法输出 0。核心思路分别编写行检查、列检查、3×3 宫格检查三个函数用布尔数组标记数字出现情况只要任意一处出现重复或非法数字即判定为不合法。算法步骤读取测试用例数 t逐个处理每个九宫格。行检查遍历每一行标记出现过的数字出现重复或超出 1~9 范围则返回不合法。列检查遍历每一列同理检查数字合法性与唯一性。3×3 宫格检查以 (1,1)、(1,4)、(1,7)、(4,1) … 为左上角起点逐个检查 9 个小宫格。三项检查全部通过则输出 1否则输出 0。正解代码#includebits/stdc.husingnamespacestd;inta[10][10],t;boolckr(inth){boolst[10]{0};for(inti1;i9;i){intxa[h][i];if(st[x]||x1||x9)return0;st[x]1;}return1;}boolckc(intl){boolst[10]{0};for(inti1;i9;i){intxa[i][l];if(st[x]||x1||x9)return0;st[x]1;}return1;}boolck3(intsx,intsy){boolst[10]{0};for(intisx;isx2;i)for(intjsy;jsy2;j){intxa[i][j];if(st[x]||x1||x9)return0;st[x]1;}return1;}boolso(){for(intk1;k9;k)if(!ckr(k))return0;for(intk1;k9;k)if(!ckc(k))return0;for(intk1;k9;k3)for(intz1;z9;z3)if(!ck3(k,z))return0;return1;}intmain(){cint;while(t--){for(inti1;i9;i)for(intj1;j9;j)cina[i][j];if(so())cout1\n;elsecout0\n;}return0;}代码关键细节3×3 宫格的起点行和列均按步长 3 递增覆盖全部 9 个宫格。每次检查前重置布尔标记数组确保各行/列/宫格检查互不影响。必须同时检查数字范围出现 0 或大于 9 的数字直接判定不合法。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价