资讯中心

2025 年 12 月青少年软编等考 C 语言二级真题解析

📅 2026/8/18 15:50:19
2025 年 12 月青少年软编等考 C 语言二级真题解析
目录T1. 一半思路分析T2. 打印锯齿思路分析T3. 充电宝思路分析T4. 漫画书思路分析T5. 实心正方形思路分析T1. 一半题目链接SOJ P2325给定一个长度为4 44的大写字母字符串S SS请判断它是否满足以下两个条件字符串中恰好包含两种不同字母这两种字母都恰好出现两次。时间限制1 s内存限制256 MB输入一个字符串S SSS SS一定是长度为4 44的大写字符串。输出如果满足条件输出Yes否则输出No。样例输入 1MAMA样例输出 1Yes样例输入 2DEED样例输出 2Yes样例输入 3PEER样例输出 3No思路分析此题考察字符串遍历属于入门题。可以用一个数组统计出每个字符出现的次数然后进行检测多于2 22个不同的字符则不满足条件出现过的字符中任一字符出现次数不是2 22次则不满足条件。较为简单的方法是对字符串进行排序如果要满足条件那么应该前2 22个字符相同后2 22个字符相同中间2 22个字符不相同。/* * Name: T1.cpp * Problem: 一半 * Author: Teacher Gao. * DateTime: 2026/01/21 16:03 */#includeiostream#includealgorithmusingnamespacestd;intmain(){ios::sync_with_stdio(false),cin.tie(0);string s;cins;sort(s.begin(),s.end());if(s[0]s[1]s[1]!s[2]s[2]s[3]){coutYes\n;}else{coutNo\n;}return0;}T2. 打印锯齿题目链接SOJ D1441给定一个整数n nn请打印一个锯齿图形这个锯齿应该分成n nn段每段形如/\。时间限制1 s内存限制256 MB输入单个整数表示n nn1 ≤ n ≤ 10 5 1\le n\le 10^51≤n≤105。输出输出该锯齿图形。样例输入 14样例输出 1/\/\/\/\样例输入 29样例输出 2/\/\/\/\/\/\/\/\/\思路分析此题考察循环结构属于入门题。按照题意进行输出即可注意输出反斜杠\时需要使用转义字符\\。/* * Name: T2.cpp * Problem: 打印锯齿 * Author: Teacher Gao. * DateTime: 2026/01/21 16:16 */#includeiostreamusingnamespacestd;intmain(){ios::sync_with_stdio(false),cin.tie(0);intn;cinn;for(inti1;in;i){cout/\\;}return0;}T3. 充电宝题目链接SOJ D1442有一块电量为n nn的充电宝她计划给若干块电池充电每次充电时会有一定电量的损失使用电量a i a_iai​时其损失电量为f ( a i ) f(a_i)f(ai​)f ( x ) f(x)f(x)表示除x xx以外x xx的最大因子。注意若只充电1 11点其损失电量也为1 11。应该如何分配用光电量使得损失总量最小。时间限制1 s内存限制256 MB输入输入一个正数表示总电量n nn2 ≤ n ≤ 2 × 10 9 2\le n\le 2\times10^92≤n≤2×109。输出输出最小损失电量。样例输入 14样例输出 12样例输入 29样例输出 22思路分析此题考察数论中的哥德巴赫猜想属于思维题。虽然哥德巴赫猜想至今未被证明但是在题目的限定范围2 × 10 9 2\times 10^92×109之内是没有反例的因此本题可用。由于每个素数只有两个因子除去它本身之外最大的因子就是1 11因此每次使用的电量为素数时损失电量最少。要想总损失最小就应将总电量n nn分解为最少数量的素数。如果n nn是素数损失为1 11如果n nn是偶数且不是素数根据哥德巴赫猜想偶数可以拆分为两个素数之和损失为2 22如果n nn是奇数且不是素数先尝试将n nn分解为2 22和n − 2 n-2n−2如果n − 2 n-2n−2是素数则损失为2 22如果n − 2 n-2n−2不是素数则可以将n nn分解为3 33和n − 3 n-3n−3由于n − 3 n-3n−3是偶数根据哥德巴赫猜想可以将n − 3 n-3n−3分解为两个素数之和于是损失为3 33。/* * Name: T3.cpp * Problem: 充电宝 * Author: Teacher Gao. * DateTime: 2026/01/26 19:33 */#includeiostreamusingnamespacestd;boolisPrime(intx){if(x1)return0;if(x2)return1;if(x%20)return0;for(inti3;i*ix;i2){if(x%i0)return0;}return1;}intmain(){ios::sync_with_stdio(false),cin.tie(0);intn,ans;cinn;if(isPrime(n))ans1;elseif(n%20)ans2;else{if(isPrime(n-2))ans2;elseans3;}coutansendl;return0;}T4. 漫画书题目链接SOJ P2533一套漫画书共有n nn册第i ii册包含a i a_iai​个章节。已知全书总章节数是奇数。如果把第1 11册第1 11章算作整册书的第1 11章那么这套书正中间的那一章位于第几册第几章时间限制1 s内存限制256 MB输入第一行一个整数n nn1 ≤ n ≤ 100 1\le n\le 1001≤n≤100。第二行n nn个整数a 1 a 2 … , a n a_1a_2…,a_na1​a2​…,an​用空格隔开1 ≤ a i ≤ 100 1\le a_i\le 1001≤ai​≤100。保证书的章节总数为奇数。输出两个整数a , b a, ba,b表示正中间那一章在第a aa册第b bb章用空格分隔。样例输入 11 1样例输出 11 1样例输入 212 28 31 31 30 31 30 31 31 30 31 31 30样例输出 27 2思路分析此题考察一维数组的使用属于入门题。首先计算出正中间章节数s u m sumsum然后从第一册开始依次尝试累加如果加上当前册之后章节数超过s u m sumsum便确定了正中间就在当前册再用s u m sumsum减去前面的总章节数便得到了正中间的章节数。/* * Name: T4.cpp * Problem: 漫画书 * Author: Teacher Gao. * DateTime: 2026/01/26 20:28 */#includeiostreamusingnamespacestd;intmain(){ios::sync_with_stdio(false),cin.tie(0);intn,a[105]{0},sum0;cinn;for(inti1;in;i){cina[i];suma[i];}sumsum/21;intcnt0,x1;while(cnta[x]sum)cnta[x];coutx sum-cntendl;return0;}T5. 实心正方形题目链接SOJ D1444给定一个整数n nn请打印一个实心的正方形它的边界由星号*构成内部由·填充每条边都恰好有n nn个星号。时间限制1 s内存限制256 MB输入单个整数表示n nn3 ≤ n ≤ 1000 3\le n\le 10003≤n≤1000。输出输出一个边界为星号、内部为点的正方形。样例输入 15样例输出 1***** *...* *...* *...* *****样例输入 23样例输出 2*** *.* ***思路分析此题考察循环结构属于入门题。使用两层循环分别控制行和列并检测行号和列号是否为边界如果是边界则输出*否则输出.。/* * Name: T5.cpp * Problem: 实心正方形 * Author: Teacher Gao. * DateTime: 2026/01/26 20:53 */#includeiostreamusingnamespacestd;intmain(){ios::sync_with_stdio(false),cin.tie(0);intn;cinn;for(inti1;in;i){for(intj1;jn;j){if(i%n1||j%n1){cout*;}else{cout.;}}cout\n;}return0;}