这是我一直试图解决的一个简单问题。首先,我输入一个正整数列表。我想从他们中选择项目,使他们的总数最大可能,他们的总和是奇数。如果无法组合,我想打印-1
。我编写了代码,但它无法正常工作。
l = sorted(list(map(int, input().split())))
if sum(l)%2 == 1:
print(sum(l))
else:
m = 0
for x in range(len(l)):
a = l
a.pop(x)
if sum(a)%2 == 1 and sum(a) > m:
m = sum(a)
例如,对于输入2 3 4 5
,它打印9
应打印11
。
任何帮助都将不胜感激。
答案 0 :(得分:6)
因此,从数字列表中,您希望获得奇数的最大可能总和。这实际上非常简单,可以很容易地解决。您需要做的是获取所有数字的总和,因为这是您可以从这些数字中获得的最大总和。现在,我们有两个选择:
在代码中,这可能如下所示:
def largestOddSum(numbers):
s = sum(numbers)
if s % 2 == 1:
return s
for x in sorted(numbers):
if x % 2 == 1:
return s - x
return -1
像这样使用:
>>> largestOddSum([2, 3, 4, 5])
11
答案 1 :(得分:3)
以一种简单的方式: 如果第一个总和是偶数,则加上所有并减去最小奇数:
if sum(l)%2 == 1:
print(sum(l))
else:
print(sum(l) - [i for i in sorted(l) if i%2==1][0])
答案 2 :(得分:2)
我认为解决这个问题的最佳方法是记住:
even + even = even
odd + even = odd
odd + odd = even
考虑到这一点,您始终可以包含所有偶数。您也可以始终包含所有奇数,只要奇数的数量不均匀即可。如果赔率的数量是偶数,那么就把最小的赔率排除在外。