【发布时间】:2016-04-01 15:43:48
【问题描述】:
这是一个我一直试图解决的简单问题。首先,我输入一个正整数列表。我想从它们中选择项目,以使它们的总数尽可能大并且它们的总和是奇数。如果无法组合,我想打印-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,它在应该打印 11 的地方打印 9。
任何帮助将不胜感激。
【问题讨论】:
-
你的意思是:它们的总和是最大的并且它们的总和是奇数。? total 不就是 sum 的意思吗?
-
换一种方式来计算。最大值,但奇数,是最大值减去最小值为奇数。你的程序完成了它的工作:2 + 3 + 4 = 9...如果我加 5,我有一个奇数,所以,不要加它...所以返回 9。这不是完成这项工作的好算法
-
@A.H.是的,我感觉是这样。但我仍然想不出任何这样的算法。
-
其他人解决了更好的算法。但是,发布的代码无法编译 - 存在缩进错误。你还需要
a = l.copy(),否则每次迭代只会缩短同一个列表,索引最终会超出范围。 -
@AndrewSwann 我已经意识到这个错误,并且已经在我的计算机中的文件中进行了更改。当我将代码粘贴到网站上时,可能会出现缩进错误。无论如何,现在我正在使用 poke 的算法。
标签: python list python-3.x