判断三个数 (无序) 是否构成等比序列
Python 实现判断三个数字是否成等比数列, 数字不一定按顺序给出. 因为只有三个数字, 所以采用特殊判断处理的方法.

判断三个数字是否成等比数列, 但数字不一定按顺序给出.

Python 实现. 因为只有三个数字, 所以特殊处理即可.

from typing import List

def is_dengbi(l: List[int]) -> bool:

    '''
    判断三个数字是否成等比数列
    数字不一定按顺序给出
    '''

    assert len(l) == 3

    def judge(l: List[int]) -> bool:
        a, b, c = l
        '''
        三个数字成等比数列的条件: b / a == c / b
        转换成乘法避免精度的问题: b * b == a * c
        '''
        return b * b == a * c
    
    ltz = []    # 三个数中小于 0 的数
    gtz = []    # 三个数中大于 0 的数
    
    for val in l:
        if val < 0:
            ltz.append(val)
        else:
            gtz.append(val)
    
    if len(ltz) == 3:
        return judge(sorted([-val for val in l]))
    elif len(ltz) == 2:
        return judge([ltz[0], gtz[0], ltz[1]])
    elif len(ltz) == 1:
        return judge([gtz[0], ltz[0], gtz[1]])
    else:
        if l[0] == 0 and l[1] == 0 and l[2] == 0:
            return True
        else:
            return judge(sorted(l))

调用代码:

s = input()

nums = [int(t) for t in s.split()]

if is_dengbi(nums):
    print('YES')
else:
    print('NO')

Last modified on 2022-07-10