题目来源
from itertools import combinations
def get_input():
"""获取输入的整数列表。"""
return list(map(int, input("请输入10个整数(用空格分隔): ").split()))
def get_min_difference(arr):
"""计算最小实力差。"""
total_sum = sum(arr) # 计算总和
min_difference = float('inf') # 初始化最小差为无穷大
min_comb = ()
# 生成所有可能的5个元素组合
for comb in combinations(arr, 5):
sub_sum = sum(comb) # 计算当前组合的和
difference = abs(total_sum - 2 * sub_sum) # 计算实力差
# 更新最小差值和组合
if difference < min_difference:
min_difference = difference
min_comb = comb # 更新当前组合为最小差值下的组合
return (min_difference, min_comb)
# 主程序入口
if __name__ == "__main__":
arr = get_input() # 获取输入
min_difference, min_comb = get_min_difference(arr) # 计算最小实力差
print(f"最小实力差: {min_difference}")
print(f"最小实力差组合: {min_comb}")
计算每个组合的实力差:
对于每个组合,我们计算阵营的实力和 sub_sum,然后计算另一队的实力和:
other_team_sum = total_sum - sub_sum
之后,计算它们之间的实力差:
difference = abs(other_team_sum - sub_sum) = abs((total_sum - sub_sum) - sub_sum) = abs(total_sum - 2 * sub_sum)