質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

3374閲覧

合計がXになる整数の組み合わせを出力する(重複あり)方法を教えてください。

poohchin

総合スコア3

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/07/20 16:18

前提

以下のサイトで重複なしの合計がXになる整数の組み合わせを出力する方法が紹介されているのですが
同じ条件で重複を許す組み合わせも出力できるようにするにはどうすればよいのでしょうか。

「qiita:合計がXになる整数の組み合わせを出力する」
https://qiita.com/Cesaroshun/items/6302542e4e32602d775d

実現したいこと

リストは以下のリストで合計が10になる組み合わせ(重複あり)を出力したい
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

重複なしのコード(上記HP参照)

list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def get_integral_value_combination(list, target):
def a(idx, l, r, t):
if t == sum(l): r.append(l)
elif t < sum(l): return
for u in range(idx, len(list)):
a((u + 1), l + [list[u]], r, t)
return r
return a(0, [], [], target)

print get_integral_value_combination(list, 10)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arcxor

2022/07/20 16:24

コードを示す場合は、「コードの挿入」(整形済みテキスト)を用いてください。
guest

回答1

0

ベストアンサー

py

1list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 2 3def get_integral_value_combination(list, target): 4 def a(idx, l, r, t): 5 if t == sum(l): r.append(l) 6 elif t < sum(l): return 7 for u in range(idx, len(list)): 8 a(u, l + [list[u]], r, t) 9 return r 10 return a(0, [], [], target) 11 12print(get_integral_value_combination(list, 10))
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 2], [1, 1, 1, 1, 1, 1, 1, 3], [1, 1, 1, 1, 1, 1, 2, 2], [1, 1, 1, 1, 1, 1, 4], [1, 1, 1, 1, 1, 2, 3], [1, 1, 1, 1, 1, 5], [1, 1, 1, 1, 2, 2, 2], [1, 1, 1, 1, 2, 4], [1, 1, 1, 1, 3, 3], [1, 1, 1, 1, 6], [1, 1, 1, 2, 2, 3], [1, 1, 1, 2, 5], [1, 1, 1, 3, 4], [1, 1, 1, 7], [1, 1, 2, 2, 2, 2], [1, 1, 2, 2, 4], [1, 1, 2, 3, 3], [1, 1, 2, 6], [1, 1, 3, 5], [1, 1, 4, 4], [1, 1, 8], [1, 2, 2, 2, 3], [1, 2, 2, 5], [1, 2, 3, 4], [1, 2, 7], [1, 3, 3, 3], [1, 3, 6], [1, 4, 5], [1, 9], [2, 2, 2, 2, 2], [2, 2, 2, 4], [2, 2, 3, 3], [2, 2, 6], [2, 3, 5], [2, 4, 4], [2, 8], [3, 3, 4], [3, 7], [4, 6], [5, 5], [10]]

再帰呼び出しの第1引数を u + 1 から u に変更するだけです。

投稿2022/07/20 16:34

arcxor

総合スコア2857

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poohchin

2022/07/21 02:43

ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問