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

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

具有總和為給定值的三元組的 If/else 語句

具有總和為給定值的三元組的 If/else 語句

largeQ 2023-04-25 16:06:18
我正在寫一個總結游戲,其中兩個玩家將輪流選擇一個范圍內的隨機數(1,9),不允許重復的數字。所以我在努力如果在任何時候玩家的三個數字總和為 15,則該玩家獲勝。如果第一個玩家選擇 [7, 2, 3, 5],他將獲勝,因為 7+3+5 = 15所以我的問題是為什么當 first_player 的輸入 == 15 時程序不停止我想避免導入任何庫。
查看完整描述

3 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

不是在每一步生成所有排列,而是維護每個排列總和的映射,然后在每次移動時向每個分支添加兩個分支。


將每個條目視為一組位,即對于每個排列,您可以包含或不包含給定的條目,例如,如果數字是 [7, 3, 2],您可以存儲 [1, 0, 1] 作為組合7 和 2。


您可以制作 101->9 等的哈希圖,當有人向其中添加 3 時,您可以為 1010->9 和 1011->12 添加一個條目。一旦你看到目標,你就知道游戲結束了。


所以 [7, 3, 2] 的演化將是


0->0

1->7

00->0

01->3

10->7

11->10

000->0

001->2

010->3

011->5

100->7

101->9

110->10

111->12


查看完整回答
反對 回復 2023-04-25
?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

一種更有效的方法是只找到那些總和等于target15 的數字。


entry = [7, 5, 1, 3]


def is_sum_15(nums):

    res = []

    search_numbers(nums, 3, 15, 0, [], res)

    return len(res) != 0

    

def search_numbers(nums, k, n, index, path, res):

    if k < 0 or n < 0:

        return 

    if k == 0 and n == 0: 

        res.append(path)

    for i in range(index, len(nums)):

        search_numbers(nums, k-1, n-nums[i], i+1, path+[nums[i]], res)


print(is_sum_15(entry)) # True


查看完整回答
反對 回復 2023-04-25
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

一種低效但簡單的方法是使用itertools.permutations:


>>> entry = [7, 2, 3, 5]

>>> import itertools

>>> [sum(triplet) for triplet in itertools.permutations(entry, r=3) if sum(tr]

[12, 14, 12, 15, 14, 15, 12, 14, 12, 10, 14, 10, 12, 15, 12, 10, 15, 10, 14, 15, 14, 10, 15, 10]

>>> any(sum(triplet) == 15 for triplet in itertools.permutations(entry, r=3))

True

這是低效的,因為每次entry用新數字擴展時你都會嘗試所有排列。


查看完整回答
反對 回復 2023-04-25
  • 3 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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