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

目录

T1. 希望如光

题目链接:SOJ D1411

在充满挑战的生活中,希望往往是支撑人们穿越黑暗的核心力量。这句台词来自影史经典《肖申克的救赎》,当被囚禁在高墙内的安迪说出 "Hope is a good thing, maybe the best of things." 时,不仅打破了监狱的压抑氛围,更向观众揭示了一个深刻的哲理:真正的自由源于内心的希望,而美好的事物永远不会消逝。这句话跨越银幕,成为无数人在低谷中重整旗鼓的精神燃料。

时间限制:1 s

内存限制:128 MB

  • 输入
    本题没有输入。

  • 输出
    如题面所示,输出分两行。注意标点符号是英文输入法的标点,并请注意大小写必须与要求一致。

  • 样例输入

    复制代码
  • 样例输出

    复制代码
    Hope is a good thing,
    maybe the best of things.

思路分析

此题考查基本输出,属于入门题。

按照题目要求输出即可。

cpp 复制代码
/*
 * Name: T1.cpp
 * Problem: 希望如光
 * Author: Teacher Gao.
 * Date&Time: 2026/01/07 23:47
 */

#include <iostream>

using namespace std;

int main()
{
    ios::sync_with_stdio(false), cin.tie(0);

    cout << "Hope is a good thing,\nmaybe the best of things." << endl;

    return 0;
}

T2. 计算表达式的值

题目链接:SOJ D1412

给定 3 3 3 个整数 a , b , c a,b,c a,b,c,计算表达式 b − ( 2 a − c ) b - (2a - c) b−(2a−c) 的值。

时间限制:1 s

内存限制:256 MB

  • 输入
    输入一行,包含三个整数 a , b , c a,b,c a,b,c,数与数之间以一个空格分开, − 10000 ≤ a , b , c ≤ 10000 -10000 \le a,b,c \le 10000 −10000≤a,b,c≤10000。

  • 输出
    输出一个整数,即表达式的值。

  • 样例输入

    复制代码
    2 3 5
  • 样例输出

    复制代码
    4

思路分析

此题考查算术运算,属于入门题。

按照题意输入三个整数后,按照给定的表达式计算输出即可。

cpp 复制代码
/*
 * Name: T2.cpp
 * Problem: 计算表达式的值
 * Author: Teacher Gao.
 * Date&Time: 2026/01/07 23:48
 */

#include <iostream>

using namespace std;

int main()
{
    ios::sync_with_stdio(false), cin.tie(0);

    int a, b, c;
    cin >> a >> b >> c;

    cout << b - (2 * a - c) << endl;

    return 0;
}

T3. 倒计时

题目链接:SOJ D1413

给定一个正整数 n n n,请输出从 n n n 开始的倒计时序列。数字以逗号分隔,不含空格。倒计时的最后一个数字为 1 1 1。

时间限制:1 s

内存限制:128 MB

  • 输入
    单个正整数:表示 n n n, 1 ≤ n ≤ 1000 1\leq n\leq 1000 1≤n≤1000。

  • 输出
    一行有 n n n 个正整数。从 n n n 开始接下来是 n − 1 n-1 n−1、 n − 2 n-2 n−2 等直到 1 1 1,中间以半角的逗号隔开。

  • 样例输入

    复制代码
    3
  • 样例输出

    复制代码
    3,2,1

思路分析

此题考查循环结构,属于入门题。

对于输入的整数 n n n,从 n n n 到 1 1 1 输出是很容易的,麻烦的是逗号的处理。可以先输出一个 n n n,之后再循环,循环体中先输出一个逗号再输出数据即可。虽然这个问题有明确的循环次数,更适合用 for 语句求解,不过这个简单问题使用 while 语句会更加简洁。

cpp 复制代码
/*
 * Name: T3.cpp
 * Problem: 倒计时
 * Author: Teacher Gao.
 * Date&Time: 2026/01/07 23:50
 */

#include <iostream>

using namespace std;

int main()
{
    ios::sync_with_stdio(false), cin.tie(0);

    int n;
    cin >> n;

    cout << n;
    while (--n) {
        cout << "," << n;
    }

    return 0;
}

T4. 渡河问题

题目链接:SOJ D1414

某个班级有 a a a 个男生, b b b 个女生,以及 2 2 2 个老师一起春游。现在遇到了一条河流,需要搭乘摆渡船过河。摆渡船只有一艘,摆渡船是由人工智能自动驾驶的,一艘船可以坐 4 4 4 个乘客。

为了让所有人渡河,至少需要几次?

时间限制:1 s

内存限制:128 MB

  • 输入
    第一行:两个正整数 a a a 和 b b b, 1 ≤ a , b ≤ 50 1\leq a,b\leq 50 1≤a,b≤50。

  • 输出
    第一行:单个整数,表示小船的往返次数。

  • 样例输入 1

    复制代码
    30 40
  • 样例输出 1

    复制代码
    18
  • 样例输入 2

    复制代码
    10 11
  • 样例输出 2

    复制代码
    6

思路分析

此题考查分支结构,属于入门题。

首先计算出总人数为 a + b + 2 a + b + 2 a+b+2,那么答案为 ⌈ a + b + 2 4 ⌉ \lceil \frac{a + b + 2}{4}\rceil ⌈4a+b+2⌉,利用分支结构判断 a + b + 2 a+b+2 a+b+2 是否为 4 4 4 的倍数即可。

事实上,利用 C++ 中的整除运算,可以在不使用分支结构的情况下求出向上取整 的结果,公式为
分子 + 分母 − 1 分母 \frac{分子 + 分母 - 1}{分母} 分母分子+分母−1

于是此题答案为 C++ 表达式 (a + b + 2 + 3) / 4

cpp 复制代码
/*
 * Name: T4.cpp
 * Problem: 渡河问题
 * Author: Teacher Gao.
 * Date&Time: 2026/01/07 23:56
 */

#include <iostream>

using namespace std;

int main()
{
    ios::sync_with_stdio(false), cin.tie(0);

    int a, b;
    cin >> a >> b;

    cout << (a + b + 2 + 3) / 4 << endl;

    return 0;
}

T5. 镜像加密

题目链接:SOJ D1415

镜像加密是一种加密方法,它通过将一个字母替换成另一个字母完成加密。加密规则如下:将前 13 13 13 个字母和后 13 13 13 个字母分成两组,镜像地构成映射:即 A 替换成 ZB 替换成 YC 替换成 X,依次类推。明文和密文之间的对应关系如下:

  • 明文:ABCDEFGHIJKLM

  • 密文:ZYXWVUTSRQPON

  • 明文:ZYXWVUTSRQPON

  • 密文:ABCDEFGHIJKLM

镜像加密的一个特点是,加密和解密算法是一样的,给一个字母加密两次,就被恢复成了明文。现在给定一个字符,请输出它被镜像加密之后的结果。注意小写字母加密后仍旧是小写字母,大写字母加密后仍旧是大写字母。

时间限制:1 s

内存限制:128 MB

  • 输入
    一个英文字母,表示需要加密的字母。

  • 输出
    一个英文字母,表示被加密后的字母。

  • 样例输入 1

    复制代码
    C
  • 样例输出 1

    复制代码
    X
  • 样例输入 2

    复制代码
    w
  • 样例输出 2

    复制代码
    d

思路分析

此题考查分支结构,属于基础题。

假设 c c c 是输入的字符变量,首先通过 'z' - c 或者 'Z' - c 计算出字符 c c c 到最后一个字母的距离,在镜像加密的规则下,加密之后的字母到第一个字母 'a''A' 的距离与这个距离是相等的。于是最终结果就是 'z' - c + 'a''Z' - c + 'A',只需要根据字母 c c c 的大小写进行选择即可。

需要注意的是,C++ 中 char 类型是一种小整数,在参与算术运算的过程中会自动转换为 int 类型,因此需要使用强制类型转换,或者 cout.put() 输出对应的字符。

cpp 复制代码
/*
 * Name: T5.cpp
 * Problem: 镜像加密
 * Author: Teacher Gao.
 * Date&Time: 2026/01/08 00:07
 */

#include <iostream>

using namespace std;

int main()
{
    ios::sync_with_stdio(false), cin.tie(0);

    char c;
    cin >> c;

    if (c <= 'Z') {
        cout.put('Z' - c + 'A');
    }
    else {
        cout.put('z' - c + 'a');
    }

    return 0;
}
相关推荐
We་ct2 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
JAVA面经实录9176 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
lilihuigz6 小时前
Tutor LMS 4.0 Beta版全新上线:以学习者为中心的移动优先学习体验
学习·在线教育·lms
王老师青少年编程6 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
周杰伦fans7 小时前
AutoCAD .NET 二次开发:深入理解 EntityJig 的工作原理与正确实现
开发语言·.net
叼烟扛炮7 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说7 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
wuweijianlove8 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法
leoufung8 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了8 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划