| 信奥业余科普 |
| 一级真题清单 | 一级练习题清单 | 一级-八级全考纲解析 |
| 二级真题清单 | 二级练习题清单 | GESP/CSP编程必备技能 |
| 三级真题清单 | 三级练习题清单 | |
| 四级真题清单 | 四级练习题清单 | 资源汇总/经验交流 |
| 五级真题清单 | 五级练习题清单 | |
| 2025辽宁CSP-XL复赛真题解析 | CSP-J 真题解析 |
| 1998年真题解析 |
| 2001年真题解析 |
| 2011年真题解析 |
GESP一级基本语句和逻辑练习,难度★☆☆☆☆。
B4495 [GESP202603 一级] 交朋友
题目要求
题目描述
Alice 班上共有 4 个小朋友,身高分别为 , , , ,其中 Alice 的身高为 。Alice 想要和身高最接近她的人交朋友,如果有多个人符合条件,则 Alice 想和其中较矮的那一人做朋友,你能告诉她这个人的身高是多少吗?
输入格式
输入共 4 行,第 行包含一个整数 ,表示班上小朋友的身高。
输出格式
输出 1 行,包含一个整数 ,表示 Alice 想交的朋友的身高。
输入输出样例 #1
输入 #1
150165135133输出 #1
135说明/提示
样例解释
样例 1 中,Alice 身高为 ,第 2、3 个小朋友与 Alice 身高差距为 ,同样最接近,Alice 选较矮的一个即第 个身高为 的小朋友交朋友。
数据范围
保证 且 互不相同。
题目分析
这道题考察的是基础的条件判断。题目的核心需求可以拆解为两个部分:
寻找身高差距最小的同学: 我们需要计算其他三位同学的身高()与 Alice 身高()的差值的绝对值,然后比较谁的差值最小。 处理差值相同的情况: 当有几个同学与 Alice 身高的差距一样大时(例如:一个比 Alice 高 15 厘米,另一个比 Alice 矮 15 厘米),按照题目要求,选择身高较矮的那一位。
基于以上分析,我们可以有不同的代码实现方式。根据 GESP 一级的考试要求,我们将使用最基础的条件分支(if...else)与循环来解决。
示例代码
对于 GESP 一级的考生,我们可以使用基础的循环语句,并在循环内部重复执行“输入同学的身高,计算差值并更新目前找到的最优选项”这样一个过程。计算差值绝对值的时候可以利用 if...else 判断。如果新输入的同学与 Alice 差值更小,我们就更新“最优朋友”的身高;如果新同学的差值与之前的最小差值相等,我们就继续判断这个新同学是否比之前的那位更矮,如果更矮,则也更新我们的选择。也可以不用循环,直接定义多个变量,使用多重条件判断进行处理。
#include<iostream>intmain(){// 存储 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;}
【推荐】移动版推荐:【GESP】C++ 认证学习资源汇总
【推荐】电脑版推荐:GESP/CSP考级资料网站:https://wiki.coderli.com/ 字典式资源整理,分类查阅方便快捷。
【推荐】GESP/CSP学习交流群

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