886 字
4 分钟
GESP 2026年C++一级编程题解析

202603-1 交朋友#

题目描述

Alice 班上共有 4 个小朋友,身高分别为 H1,H2,H3,H4H_1, H_2, H_3, H_4,其中 Alice 的身高为 H1H_1

Alice 想要和身高最接近她的人交朋友,如果有多个人符合条件,则 Alice 想和其中较矮的那一人做朋友,你能告诉她这个人的身高是多少吗?

输入格式

输入共 4 行,第 ii 行包含一个整数 HiH_i,表示班上小朋友的身高。

输出格式

输出 1 行,包含一个整数 hh,表示 Alice 想交的朋友的身高。

输入样例

150
165
135
133

输出样例

135

样例解释

样例 1 中,Alice 身高为 150,第 2、3 个小朋友与 Alice 身高差距为 15,同样最接近,Alice 选较矮的一个即第 3 个身高为 135 的小朋友交朋友。

数据范围

保证 100Hi199100 \le H_i \le 199HiH_i 互不相同。

代码解析

这道题是一道“打擂台”求最小值的题,不过加了一些难度,是需要让每个数字减掉一个数字的差值去打擂台,而且这个差值有可能小于0,如 165-150=15,135-150=(-15),所以我们需要用差值的绝对值去打擂台,若绝对值相等就拿数字本身去打擂台,如 135 和 165 我们选小的 135

#include <bits/stdc++.h>
using namespace std;
int main() {
int h1, ans = 1000;
cin >> h1;
for (int i = 1; i <= 3; i++) {
int hi;
cin >> hi;
int d1 = abs(hi-h1), d2 = abs(ans-h1);
if (d1 < d2)
ans = hi;
else if (d1 == d2 && hi < ans)
ans = hi;
}
cout << ans;
return 0;
}

如果还没有学过数学函数 abs() 的话,可以定义变量保存差值,判断是否 < 0,如:

int d1 = hi-h1;
if (d1 < 0) d1 = -d1;
int d2 = hi-h1;
if (d2 < 0) d2 = -d2;

202603-2 数字替换#

题目描述

Alice 不喜欢数字 4,但觉得数字 8 寓意好,她想把数中的 4 全都替换成 8,若数中不含 4 则无需修改,你能帮帮她吗?

输入格式

输入一行,包含一个整数 AA,表示替换前的数。

输出格式

输出一行,包含一个整数 BB,表示替换后的数。

输入样例 1

8459045

输出样例 1

8859085

输入样例 2

123

输出样例 2

123

数据范围

保证 0A1080 \le A \le 10^8

代码解析

如果已经学了字符串,那只需要输入字符串遍历即可,但是一级的考纲不包含字符串,所以最简单的方法就是:

使用字符,依次输入,如果是字符 4 就输出 8,唯一的难点是题目没有给出数字的位数,所以我们可以直接把 cin 作为循环条件(这个技巧是第一次出现,平时几乎很少见,在考场上可能想不到)。

#include <bits/stdc++.h>
using namespace std;
int main() {
char n;
while (cin >> n) {
if (n == '4') cout << 8;
else cout << n;
}
return 0;
}

第二种解法就是使用数位分离(剥离)的技巧,将每个数字单独提取出来,判断是否为 4,若为 4 则变成 8,再利用进制相关知识,重新组合成新的数字,输出即可。

#include <iostream>
using namespace std;
int main() {
int A;
cin >> A;
int B = 0, weight = 1; // 位权:1, 10, 100, ...
while (A > 0) {
int t = A % 10;
if (t == 4) t = 8;
A /= 10;
// 将处理后的数字乘以其位权,加到结果中
B += t * weight;
weight *= 10; // 更新位权
}
cout << B << endl;
return 0;
}
GESP 2026年C++一级编程题解析
https://yezi.press/posts/gesp/gesp-cpp1-2026/
作者
Yezi 叶子
发布于
2026/03/14
许可协议
CC BY-NC-SA 4.0