B4495 [GESP202603 一级] 交朋友 题解

· · 题解

欢迎报名洛谷网校,报名课程可以获得对应组别的知识点讲解与答疑服务,期待和大家一起进步!点击图片即可报名。

:::align{center} :::

我们可以用最朴素的方法来算“差距”:如果对方比 Alice 高,就用“对方的身高减去 Alice 的身高”;如果对方比 Alice 矮,就用“Alice 的身高减去对方的身高”。这样算出来的结果永远是一个正数,代表了两个人之间的距离。

具体的逻辑是这样的:我们先请出第 2 个小朋友,算好他跟 Alice 的差距,暂时把他当成“最好的朋友”。接着,请出第 3 个小朋友,算出他的差距。如果他的差距更小,或者差距一样大但他更矮,那他就成了新的“最好朋友”。最后,我们再用同样的办法去请第 4 个小朋友来挑战。这样一轮轮比下来,最后留下的那个人就是我们要找的答案了。

int main() {
    // h1 是 Alice,h2, h3, h4 是其他三个小朋友
    int h1, h2, h3, h4;
    // 读入四个小朋友的身高
    ________________; 
    // --- 计算第 2 个小朋友和 Alice 的差距 d2 ---
    int d2;
    if (h2 > h1) {
        d2 = ________;
    } else {
        d2 = ________;
    }
    // 计算第 3 个小朋友和 Alice 的差距 d3,第 4 个小朋友和 Alice 的差距 d4
    // 请你根据刚刚的逻辑完成第 3、4 个小朋友的代码。
    ________;
    // ans 用来记下目前最合适的朋友身高,m 记录最小的差距
    // 我们先让第 2 个小朋友当“擂主”
    int ans = h2, m = d2;
    // 让第 3 个小朋友“打擂台”
    if (d3 < m) {
        ________;
        ________;
    } 
    // 如果差距一样大,那就看谁更矮,矮的那个赢
    else if (d3 == m) {
        if (________) {
            ________;
        }
    }
    // 让第 4 个小朋友来挑战
    // 逻辑和刚才一样:先看差距,再看身高
    // 请你根据刚刚的逻辑完成第 4 个小朋友的代码。
    ________;
    // 想一想,答案是什么,如何输出?
    ________;
    return 0;
}