2025 年 12 月青少年软编等考 C 语言一级真题解析
目录T1. 数数思路分析T2. 分糖果思路分析T3. 等差数列思路分析T4. 灯塔思路分析T5. 知识竞赛思路分析T1. 数数题目链接SOJ P2798老师给小米布置了一个数数练习“请数一数从数字A AA到数字B BB之间一共有多少个整数包括A AA和B BB。”同时老师提醒说如果A AA比B BB大那就一个数都没有直接回答0 00。时间限制1 s内存限制256 MB输入第一行两个整数A B A BAB1 ≤ A , B ≤ 100 1≤A,B≤1001≤A,B≤100。输出输出满足条件的个数。样例输入 15 7样例输出 13样例输入 211 10样例输出 20样例输入 320 30样例输出 311思路分析此题考查分支结构属于入门题。当a b a bab时输出0 00否则输出b − a 1 b - a 1b−a1即为答案。/* * Name: T1.cpp * Problem: 数数 * Author: Teacher Gao. * DateTime: 2026/01/08 02:07 */#includeiostreamusingnamespacestd;intmain(){ios::sync_with_stdio(false),cin.tie(0);inta,b;cinab;if(ab){cout0endl;}else{coutb-a1endl;}return0;}T2. 分糖果题目链接SOJ D1422有三包糖果分别有A AA、B BB、C CC颗。想把这三包糖果分成两组或三组并且每组糖果的总数要一样多。糖果的包装不能拆开。请问能否做到时间限制1 s内存限制256 MB输入第一行三个整数A AA、B BB、C CC用空格隔开1 ≤ A , B , C ≤ 1000 1≤A,B,C ≤10001≤A,B,C≤1000。输出如果可以按要求分成若干组输出Yes否则输出No。样例输入 12 6 4样例输出 1Yes样例输入 26 6 6样例输出 2Yes样例输入 31 3 5样例输出 3No思路分析此题考查分支机构的应用属于基础题。可以分成三组的条件是三包糖果数量一致可以分成两组的条件是数量最多的一包糖果的数量等于其余两包之和。因此需要找出三个数中的最大值可以利用打擂台思想与 2025 年 9 月一级第四题类似。/* * Name: T2.cpp * Problem: 分糖果 * Author: Teacher Gao. * DateTime: 2026/01/08 02:09 */#includeiostreamusingnamespacestd;intmain(){ios::sync_with_stdio(false),cin.tie(0);inta,b,c;cinabc;if(ba)swap(a,b);if(ca)swap(a,c);if(abc){// 可以分成两组coutYes\n;}elseif(abbc){// 可以分成三组coutYes\n;}else{coutNo\n;}return0;}T3. 等差数列题目链接SOJ P7787给定整数A AAB BB。请求出有多少个整数x xx满足将A AAB BBx xx这三个整数以某种顺序排列使其构成一个等差数列。这里若将三个整数p ppq qqr rr按此顺序排列后若q − p q-pq−p等于r − q r-qr−q则称其为等差数列。时间限制1 s内存限制256 MB输入两个整数A , B A,BA,B1 ≤ A , B ≤ 100 1≤A,B≤1001≤A,B≤100。输出请输出满足题目条件的整数x xx的个数。样例输入 15 5样例输出 11样例输入 24 6样例输出 23样例输入 318 11样例输出 32思路分析此题考查分支结构与数学属于基础题。对于给定的两个整数a , b a,ba,b要想新增一个整数x xx使得它们构成等差数列x xx的可选位置最多只有3 33个不失一般性地假设a ≥ b a\ge ba≥b当a b a bab时公差必定为0 00于是x xx只有1 11种可能那就是继续与a , b a,ba,b重叠当a − b a - ba−b为奇数时说明无法在a , b a,ba,b之间添加一个整数x xx使得x xx到a aa和b bb的距离相等那么x xx只能放在a aa和b bb之外有2 22种方案当a − b a - ba−b为偶数时说明可以在a , b a,ba,b之间添加一个整数x xx使得x xx到a aa和b bb的距离相等从而构成等差数列再加上a aa和b bb之外的两种情况总共3 33种情况。/* * Name: T3.cpp * Problem: 等差数列 * Author: Teacher Gao. * DateTime: 2026/01/08 02:21 */#includeiostreamusingnamespacestd;intmain(){ios::sync_with_stdio(false),cin.tie(0);inta,b;cinab;if(ab)swap(a,b);if(ab){cout1\n;}elseif((a-b)%21){cout2\n;}else{cout3\n;}return0;}T4. 灯塔题目链接SOJ P7788港口灯塔会在每天的A AA点钟发射一次重要的安全信号。你是一名水手作息非常规律B BB点整入睡C CC点整醒来且睡眠时间不会超过24 2424小时。只有在清醒时你才能正确接收灯塔信号睡着时无法接收。请判断你是否每天都能接收到灯塔的安全信号。时间限制1 s内存限制256 MB输入三个整数A , B , C A,B,CA,B,C0 ≤ A , B , C 24 0≤A,B,C240≤A,B,C24A AAB BB和C CC各不相同。输出如果你每天都能接收到信号则输出Yes否则输出No。样例输入 112 13 11样例输出 1Yes样例输入 216 20 22样例输出 2Yes样例输入 310 8 6样例输出 3No思路分析此题考查分支结构属于基础题与 [ABC228A] On and Off 思路一致问题背景刚好相反。由于睡眠时间不会超过24 2424小时因此如果b c b cbc说明睡眠时间是同一天那么当a aa介于b ∼ c b\sim cb∼c之间时无法接收到灯塔信号如果b c b cbc说明睡眠时间跨越到了第二天那么当a aa介于c ∼ b c\sim bc∼b之间时可以接收到灯塔信号。/* * Name: T4_1.cpp * Problem: 灯塔 * Author: Teacher Gao. * DateTime: 2026/01/08 02:33 */#includeiostreamusingnamespacestd;intmain(){ios::sync_with_stdio(false),cin.tie(0);inta,b,c;cinabc;if(bc){if(baac){coutNo\n;}else{coutYes\n;}}else{if(caab){coutYes\n;}else{coutNo\n;}}return0;}更进一步地可以用c c − b cc-bcc−b计算出每天睡眠的时长c cc用a a − b aa-baa−b计算出目标时间点距离开始睡眠时间点的时间差a aa。由于时间可能会跨越两天因此两个时间差都有可能是负数可以给时间差加上 24 之后再对 24 取余来保证时间差都是非负的。接下来只需要检测目标时间点距离开始睡眠时间点的时间差a aa是否大于睡眠时长c cc即可。/* * Name: T4_2.cpp * Problem: 灯塔 * Author: Teacher Gao. * DateTime: 2026/01/17 00:17 */#includeiostreamusingnamespacestd;intmain(){ios::sync_with_stdio(false),cin.tie(0);inta,b,c;cinabc;c(c-b24)%24;a(a-b24)%24;if(ac){coutYes\n;}else{coutNo\n;}return0;}T5. 知识竞赛题目链接SOJ P4031一场知识竞赛共有3 33道题目分值分别是1 11分、2 22分和4 44分。小蓝、小橙和小绿三人参加了比赛。小蓝获得A AA分小橙获得B BB分。小绿能答出小蓝和小橙中至少有一人答对的题目但无法答出两人都答不出的题目。请求出小绿的得分。在本题条件下保证小绿的得分是唯一确定的。时间限制1 s内存限制256 MB输入一行两个整数A AA和B BB用空格隔开0 ≤ A , B ≤ 7 0≤A,B≤70≤A,B≤7。输出一个整数表示小绿的得分。样例输入 11 2样例输出 13样例输入 20 0样例输出 20思路分析此题考查位运算属于基础题。如果使用分支结构进行分类讨论情况过于复杂繁琐。注意到3 33道题的得分刚好对应二进制下3 33个不同的位权根据题意小绿可以答出小蓝和小橙至少一人答出的题目因此把a aa和b bb按位或运算之后即可得到小绿的得分。/* * Name: T5.cpp * Problem: 知识竞赛 * Author: Teacher Gao. * DateTime: 2026/01/08 02:47 */#includeiostreamusingnamespacestd;intmain(){ios::sync_with_stdio(false),cin.tie(0);inta,b;cinab;cout(a|b)endl;return0;}