牛客网看到的爱奇艺前端实习笔试编程题
发布于 1 年前 作者 vanishcode 1789 次浏览 来自 分享

大意: 给任意三个整数a b c 操作一:任意取其中两个数+1 操作二:任意取其中一个数+2 求最少的操作步骤数使得最后三个数相等

如 输入 2 4 5 输出 2 (抱歉刚才有事出去了,,然后回来时候以为自己写完帖子了,,就发了。。。sb了。。。)

6 回复

读不懂什么意思

@18Yi 更新了,我sb了。。嘻嘻,以为自己写完了就发上来了。。。。

分别设置X, Y, Z从小到大. (Z - Y) + Math.floor((Y - X) / 2) + ((Y - X) % 2 > 0 ? 2 : 0);

function minop(a, b, c) {
  const t = Math.max(a, b, c) * 3 - a - b - c;
  return ~~(t / 2) + t % 2 * 2;
}

minop(1, 1, 1); // 0
minop(1, 2, 1); // 1
minop(-2, 1, 2); // 4
int main() {
    int a[3];
    cin >> a[0] >> a[1] >> a[2];
    sort(a, a + 3);
    if ((a[2] - a[1] + a[2] - a[0]) % 2 == 0)
        cout << (a[2] - a[1] + a[2] - a[0]) / 2;
    else
        cout << (a[2] - a[1] + a[2] - a[0] + 3) / 2;
    return 0;
}
  1. 三个奇数 => 给其中两个更小的数加2,直到三数相等
  2. 三个偶数 => 给其中两个更小的数加2,直到三数相等
  3. 一奇二偶 => 给其中两个偶数各加1,变为三个奇数,然后给其中两个更小的数加2,直到三数相等
  4. 一偶二奇 => 给其中两个奇数各加1,变为三个偶数,然后给其中两个更小的数加2,直到三数相等
回到顶部