三角形的判定条件是:任意两边之和大于第三边(简化为:排序后,最短两边之和大于最长边)。
要从6根棍子里挑选出3根,共有C63=20种不同的方案。
若使用暴力法,则有三层for循环,用于选出3根棍子的组合:
def is_triangle(sticks):
"""判断3根棍子能否组成三角形(sticks是长度为3的列表)"""
# 先排序,简化判断条件
s = sorted(sticks)
# 最短两边之和大于最长边即可
return s[0] + s[1] > s[2]
def check_all_combinations(sticks):
"""遍历6根棍子分成两组各3根的所有组合,检查是否有符合条件的情况"""
n = len(sticks)
# 6根棍子的索引是0-5,遍历所有选3个索引的组合(i<j<k,避免重复)
# 这样能保证每个组合只被选一次,比如(0,1,2)和(3,4,5)是一组,不会反过来选
for i in range(n):
for j in range(i+1, n):
for k in range(j+1, n):
# 第一组:选索引i,j,k的棍子
group1 = [sticks[i], sticks[j], sticks[k]]
# 第二组:剩下的棍子(通过索引判断是否不在i,j,k中)
group2 = []
for idx in range(n):
if idx != i and idx != j and idx != k:
group2.append(sticks[idx])
# 检查两组是否都能组成三角形
if is_triangle(group1) and is_triangle(group2):
return True
# 所有组合都不满足
return False
# 处理输入输出
t = int(input())
for _ in range(t):
sticks = list(map(int, input().split()))
# 确保输入是6根棍子
if len(sticks) != 6:
print("No")
continue
if check_all_combinations(sticks):
print("Yes")
else:
print("No")
若使用库:itertools.combinations,可以快速生成从 6 根中选 3 根的所有组合,返回的是元组形式。(即:AI默认使用的更优方法)
import itertools
def is_triangle(s):
a,b,c=sorted(s)
return a+b>c
def check(sticks):
for combo in itertools.combinations(sticks,3):
rest=sticks.copy()
for num in combo:
rest.remove(num)
if is_triangle(combo) and is_triangle(rest):
return('Yes')
return('No')
n=int(input())
for _ in range(n):
sticks=list(map(int,input().split()))
print(check(sticks))



京公网安备 11010502036488号