1. 题目背景与需求解析
这道GESP C++一级考试题目"交朋友"看似简单,却蕴含了编程初学者需要掌握的多个核心概念。题目描述了一个生活化的场景:Alice要在班上三位同学中寻找与自己身高最接近的朋友。如果存在多个相同差距的同学,则选择其中最矮的一位。
这个题目主要考察以下几个编程基础能力:
- 变量的定义与使用
- 基本的输入输出操作
- 条件判断语句的应用
- 绝对值的计算与比较
- 简单算法的设计与实现
对于初学者而言,这道题的价值在于它把抽象的编程概念具象化为一个容易理解的现实场景。通过解决这个问题,学生能够直观地理解如何用代码解决实际问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解题思路详解
2.1 基础解法分析
最直观的解法是分别计算Alice与其他三位同学的身高差,然后进行比较。具体步骤如下:
- 定义四个变量存储四个人的身高
- 计算Alice(h1)与h2、h3、h4的绝对差值
- 初始化最小差值为h1与h2的差值
- 依次比较h3和h4的差值
- 如果差值更小,更新最小差值和答案
- 如果差值相同,比较身高,保留较矮的
- 输出最终结果
这种方法的优点是逻辑清晰,易于理解,适合编程初学者。它直接反映了我们人工解决问题的思考过程。
2.2 优化解法思路
更进阶的解法是使用数组和循环结构,这体现了更好的编程实践:
- 使用数组存储四个身高值
- 初始化最小差值为一个足够大的数(如100)
- 使用循环遍历其他三位同学
- 在循环中计算当前差值
- 比较并更新最小差值和答案
- 输出结果
这种方法减少了重复代码,更易于扩展。如果同学数量增加,只需调整循环次数即可,而不需要修改核心逻辑。
3. 代码实现与解析
3.1 基础实现代码
cpp复制#include<bits/stdc++.h>
using namespace std;
int h1, h2, h3, h4;
int main() {
cin >> h1 >> h2 >> h3 >> h4;
int c12 = abs(h1 - h2);
int c13 = abs(h1 - h3);
int c14 = abs(h1 - h4);
int minc = c12;
