青训营AI刷题-平衡三个数

106 阅读1分钟

问题描述

小M有三个整数 x,y,z,他想要让这三个数平衡。具体来说,平衡的定义是:选择任意两个数,计算它们的平均数 K,然后将第三个数通过加1或者减1的操作,调整到与 K 相等。如果平均数 K 不是整数,则不可能平衡,必须重新选择。请你帮助小M计算最少的操作次数,使三个数平衡。


测试样例

样例1:

输入:x = 3, y = 3, z = 4
输出:1

样例2:

输入:x = 1, y=5, z=9
输出:0

样例3:

输入:x = 7, y = 7, z = 10
输出:1

错误示范

def solution(x: int, y: int, z: int) -> int:
    # write code here
    def cal(i: int, j: int, k: int) -> int:
        if (i+j) % 2 != 0:
            return None
        return abs((i+j)//2-k)

    arr = [cal(x, y, z), cal(x, z, y), cal(z, y, x)]
    return min([i for i in arr if i != None])

样例3怎么都无法通过,后来看明白是被题目误导了:

平衡的定义是:选择任意两个数,计算它们的平均数 K,然后将第三个数通过加1或者减1的操作,调整到与 K 相等。如果平均数 K 不是整数,则不可能平衡,必须重新选择。请你帮助小M计算最少的操作次数,使三个数平衡

题目的意思应该理解为:使三个数平衡能够平衡的最小操作次数

题解

解法很简单

def solution(x: int, y: int, z: int) -> int:
    # write code here
    return 0 if x % 2 + y % 2 + z % 2 in [0, 3] else 1

如果三个数全为奇数或全为偶数,直接返回 0,否则返回 1