牛客网看到的爱奇艺前端实习笔试编程题
大意: 给任意三个整数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;
}
- 三个奇数 => 给其中两个更小的数加2,直到三数相等
- 三个偶数 => 给其中两个更小的数加2,直到三数相等
- 一奇二偶 => 给其中两个偶数各加1,变为三个奇数,然后给其中两个更小的数加2,直到三数相等
- 一偶二奇 => 给其中两个奇数各加1,变为三个偶数,然后给其中两个更小的数加2,直到三数相等