给出三个整数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
其正确的输出是: 是的
我的代码的输出是: 不
我的代码有什么问题?
答案 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')