检查它是否是直角三角形

时间:2020-03-17 06:18:55

标签: python math

给出三个整数a,b和c作为三元组。任务是检查是否可以制作直角三角形。

输入的第一行包含一个整数T,它表示测试用例的数量。然后是T测试用例。每个测试用例包含三个整数a,b和c。

t=int(input())
for i in range(1,t+1):
    a,b,c = input().split() 
    l=[a,b,c]
    l.sort()
    x=int(l[0])
    y=int(l[1])
    z=int(l[2])

    if z**2 == (x**2)+(y**2):
        print("Yes")
    else:
        print("No")

可能该代码不适用于多个测试用例(TC)。 您的代码失败的第一个测试用例:

输入: 822 1096 1370

其正确的输出是: 是的

我的代码的输出是: 不

我的代码有什么问题?

4 个答案:

答案 0 :(得分:2)

要解决此问题,您必须先对输入进行排序,然后再将其转换为int类型。您可以使用列表理解来做到这一点。

t=int(input())
for i in range(1,t+1):
    a,b,c = [int(x) for x in input().split()]
    l=[a,b,c]
    l.sort()
    x=l[0]
    y=l[1]
    z=l[2]

    if z**2 == (x**2)+(y**2):
        print("Yes")
    else:
        print("No")

答案 1 :(得分:0)

您的输入来自std控制台,它以字符串形式出现。您已在稍后阶段将其转换为int,但这确实有帮助。

对列表进行排序的原因=它只是对字符串的排序方式进行排序。

所以输入-3 4 5为'3','4','5',答案为True,因为默认情况下您的排序是整数排序。

在-822 1096 1370的情况下,l = ['822','1096','1370']变为['1096','1370','822'],因为按时间顺序对字符串进行了排序。

所以你的数学运算失败了。

f()

对于我测试过的某些测试用例,它可以很好地工作,也许在某些极端情况下,您可以进行更多的检查或验证。

答案 2 :(得分:0)

您的输入来自命令行,因此按字典顺序进行排序:'822'大于'1096',因为'8'大于'1'

在排序之前转换为int:

    inp = [int(i) for i in input().split()]
    inp.sort()
    a, b, c = inp
    if a**2 + b**2 == c**2:
        print('Yes')
    else:
        print('No')

答案 3 :(得分:0)

看,'sort

n_lines = int(input())
for _ in range(n_lines):
    squares = [int(x)**2 for x in input().split()]
    if sum(squares)//2 in squares:
        print('y')
    else:
        print('n')