簡體   English   中英

python - 打印列表中總和最大且奇數的項目總和

[英]python - print the sum of items in list whose total is the largest and is odd

這是我一直試圖解決的一個簡單問題。 首先,我輸入一個正整數列表。 我想從他們中選擇項目,使他們的總數最大可能,他們的總和是奇數。 如果沒有可能的組合,我想打印-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

任何幫助,將不勝感激。

因此,從數字列表中,您希望獲得最大可能的總和,這是奇數。 這實際上非常簡單,可以很容易地解決。 您需要做的是獲取所有數字的總和,因為這是您可以從這些數字中獲得的最大總和。 現在,我們有兩個選擇:

  1. 總和很奇怪:在那種情況下,我們已經完成了。 最大可能的總和也是奇數,所以我們得到了結果。
  2. 總和是均勻的:在這種情況下,我們有最大可能的總和但我們並不奇怪。 為了解決這個問題,我們需要從總和中刪除最小的奇數。 因此,我們查看已排序的數字列表,並從中選擇第一個奇數。 通過從偶數和中刪除奇數,我們再次得到一個奇數,並且由於我們選擇了最小的可能數,我們知道新的和是最大的奇數。 這就是結果。

在代碼中,這可能如下所示:

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

一個簡單的方法:加上所有並減去最小奇數,如果第一個和是偶數:

if sum(l)%2 == 1:
    print(sum(l))
else:
    print(sum(l) - [i for i in sorted(l) if i%2==1][0])

我認為解決這個問題的最佳方法是記住:

even + even = even
odd + even = odd
odd + odd = even

考慮到這一點,您始終可以包含所有偶數。 您也可以始終包含所有奇數,只要奇數的數量不均勻即可。 如果賠率是偶數,那么就把最小的賠率留下來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM