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;
}