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;
}
相关推荐
guygg8817 小时前
结合VD算法与IMM算法的卡尔曼滤波机动目标跟踪方法
人工智能·算法·目标跟踪
董世昌4117 小时前
js遍历数组和对象的常用方法有哪些?
开发语言·javascript·ecmascript
小CC吃豆子17 小时前
Java数据结构与算法
java·开发语言
R-G-B17 小时前
BM28 二叉树的最大深度
数据结构·算法·二叉树·bm28·二叉树的最大深度
晨旭缘17 小时前
后端日常启动及常用命令(Java)
java·开发语言
星辰_mya17 小时前
RockerMQ之commitlog与consumequeue
java·开发语言
用户02033886131417 小时前
红黑树主要功能实现
算法
꧁Q༒ོγ꧂17 小时前
C++ 入门完全指南(六)--指针与动态内存
开发语言·c++
梁山1号17 小时前
【关于CAN】
c语言·stm32·单片机