You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断三个无序数字是否构成Pythagorean triple(勾股数)

无需预排序判断勾股三元组的实现方案

核心逻辑非常简单,不需要对三个输入数做排序操作,仅需利用勾股三元组的定义:三个数中一定存在一个数的平方等于剩余两个数的平方和,直接对所有可能的情况做判断即可,实现成本和计算开销都远低于预排序的方案。

实现方案1:枚举所有斜边可能

三个输入数最多只有3种斜边可能,直接枚举所有情况判断即可:

def pythagorean(a, b, c):
    # 预先计算平方避免重复计算
    sq_a = a * a
    sq_b = b * b
    sq_c = c * c
    # 分别判断三个数作为斜边的场景
    return sq_a + sq_b == sq_c or sq_a + sq_c == sq_b or sq_b + sq_c == sq_a

实现方案2:取最大值计算(写法更简洁)

不用排序也可以直接拿到三个数的最大值,用三个数的平方总和减去最大值平方得到另外两数的平方和,直接对比即可:

def pythagorean(a, b, c):
    sq_a, sq_b, sq_c = a*a, b*b, c*c
    max_sq = max(sq_a, sq_b, sq_c)
    return max_sq == sq_a + sq_b + sq_c - max_sq

如果需要严格校验输入为正整数的勾股数,可以增加入参校验逻辑:

def pythagorean(a, b, c):
    # 校验为正整数
    if not (isinstance(a, int) and isinstance(b, int) and isinstance(c, int)) or a <=0 or b <=0 or c <=0:
        return False
    sq_a, sq_b, sq_c = a*a, b*b, c*c
    max_sq = max(sq_a, sq_b, sq_c)
    return max_sq == sq_a + sq_b + sq_c - max_sq

测试效果

  • pythagorean(3, 4, 5) 返回 True
  • pythagorean(5, 3, 4) 返回 True
  • pythagorean(4, 3, 6) 返回 False

内容的提问来源于stack exchange,提问作者royan maeri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:45:05