三角形的判定条件是:任意两边之和大于第三边(简化为:排序后,最短两边之和大于最长边)。

要从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))