题目来源
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)