亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我將如何編輯這個貪婪的函數來給我一個總和?

我將如何編輯這個貪婪的函數來給我一個總和?

慕的地8271018 2021-08-05 15:09:48
所以,我想創建一個函數,它接受 int s 和數組 A,然后返回加起來為 s 的元素數組 A。如果沒有子集,則應返回最接近 s 的值。例如:A = [12, 79, 99, 91, 81, 47]s = 150將返回:[12, 91, 47]為12 + 91 + 47是150。以下是我到目前為止所擁有的。我究竟做錯了什么?def closest(s, A):    if s == 0:        return 0    for i in range(len(A)):        if A[i] <= s:            return 1 + closest(s - A[i], A)
查看完整描述

2 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

在您的情況下,代碼是:


import itertools


def itersum(nums, target):


    result = [seq for i in range(len(nums),0,-1) for seq in itertools.combinations(nums,i) if sum(seq) == target]

    if result != target:

       for j in range(target):

           result1 = [seq for i in range(len(nums),0,-1) for seq in itertools.combinations(nums,i) if sum(seq) == target + j]

           result2 = [seq for i in range(len(nums),0,-1) for seq in itertools.combinations(nums,i) if sum(seq) == target - j]

           if (len(result1) + len(result2)) > 0:

               result = result1 if result1 > result2 else result2

               break            

    return result


A = [12, 79, 99, 91, 81, 44]


s = 150


itersum(A, s)


查看完整回答
反對 回復 2021-08-05
?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

該函數應該返回一個列表列表,因為可能有多個組合加起來為給定的總和:


def closest(s, A):

    if s == 0:

        return [[]]

    o = []

    for i, n in enumerate(A):

        if n <= s:

            for c in closest(s - n, A[i + 1:]):

                o.append([n] + c)

    return o

以便:


closest(150, [12, 79, 99, 91, 81, 47])

返回:


[[12, 91, 47]]

然后:


closest(10, [4, 5, 6, 2, 1, 3])

返回:


[[4, 5, 1], [4, 6], [4, 2, 1, 3], [5, 2, 3], [6, 1, 3]]


查看完整回答
反對 回復 2021-08-05
  • 2 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號