文章

【GESP】C++一级真题 luogu-B4495, [GESP202603 一级] 交朋友

GESP一级基本语句和逻辑练习,难度★☆☆☆☆。

B4495 [GESP202603 一级] 交朋友

题目要求

题目描述

Alice 班上共有 4 个小朋友,身高分别为 $H_1$, $H_2$, $H_3$, $H_4$,其中 Alice 的身高为 $H_1$。Alice 想要和身高最接近她的人交朋友,如果有多个人符合条件,则 Alice 想和其中较矮的那一人做朋友,你能告诉她这个人的身高是多少吗?

输入格式

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

输出格式

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

输入输出样例 #1

输入 #1

1
2
3
4
150
165
135
133

输出 #1

1
135

说明/提示

样例解释

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

数据范围

保证 $100 \le H_i \le 199$ 且 $H_i$ 互不相同。


题目分析

这道题考察的是基础的条件判断。题目的核心需求可以拆解为两个部分:

  1. 寻找身高差距最小的同学: 我们需要计算其他三位同学的身高($H_2, H_3, H_4$)与 Alice 身高($H_1$)的差值的绝对值,然后比较谁的差值最小。
  2. 处理差值相同的情况: 当有几个同学与 Alice 身高的差距一样大时(例如:一个比 Alice 高 15 厘米,另一个比 Alice 矮 15 厘米),按照题目要求,选择身高较矮的那一位。

基于以上分析,我们可以有不同的代码实现方式。根据 GESP 一级的考试要求,我们将使用最基础的条件分支(if...else)与循环来解决。

示例代码

对于 GESP 一级的考生,我们可以使用基础的循环语句,并在循环内部重复执行“输入同学的身高,计算差值并更新目前找到的最优选项”这样一个过程。计算差值绝对值的时候可以利用 if...else 判断。如果新输入的同学与 Alice 差值更小,我们就更新“最优朋友”的身高;如果新同学的差值与之前的最小差值相等,我们就继续判断这个新同学是否比之前的那位更矮,如果更矮,则也更新我们的选择。也可以不用循环,直接定义多个变量,使用多重条件判断进行处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>

int main() {
    // 存储 Alice 的身高
    int h1;
    std::cin >> h1;

    // 记录目前发现的最小身高差距,初始值设为一个足够大的数
    int min_diff = 1000;
    // 记录目前最符合条件的同学的身高
    int best_h = 0;

    // 循环 3 次,处理剩下的 3 个同学
    for (int i = 0; i < 3; i++) {
        int h;
        std::cin >> h;

        // 计算当前输入的同学身高 h 与 Alice 身高 h1 的差值的绝对值
        int diff;
        if (h > h1) {
            diff = h - h1;
        } else {
            diff = h1 - h;
        }

        // 如果发现更小的身高差,直接记录
        if (diff < min_diff) {
            min_diff = diff; // 更新最小差距记录
            best_h = h;      // 暂时敲定找这个同学交朋友
        }
        // 如果身高差和目前记录的最小身高差一样大,那么选择较矮的那一个
        else if (diff == min_diff) {
            if (h < best_h) {
                best_h = h;  // 发现了同样身高差,但身高更矮的同学
            }
        }
    }

    // 输出最终确定的人当朋友
    std::cout << best_h << std::endl;

    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP 学习专题站:GESP WIKI

luogu-”系列题目可在洛谷题库进行在线评测。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

欢迎加入Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答

欢迎加入C++ GESP/CSP认证学习QQ频道,考试资源总结汇总

欢迎加入C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
本文由作者按照 CC BY-NC-SA 4.0 进行授权