2017-10-21 22 views
-1

今私は、ゼロより大きく、値より小さい数を使って、値の合計の組み合わせの数を見つけることができるコードを持っています。 値を変更して、それらの値が単なる値以上になるように組み合わせを展開する必要があります。例えば100 = 1にするにはどうすればよいですか? (説明内)

: 番号10の結果をもたらす: [1、2、3、4]、[1、2、7]、 [1、3、6]、[1、4、5] 、 [1、9]、[2,3,5]、[2,8]、 [3,7]、[4,6] しかし、これを1に崩壊する任意の数値よく本質的には、数字= n内の個々の数字の合計で100 = nが必要です。したがって、この場合100 = 1 + 0 + 0 = 1であるため100 = 1 したがって、数字1999は、1999 = 1 + 9 + 9 + 9 = 28であるためvalue = 100のリストとして有効な組み合わせになります。 282 = 2 + 8 = 10、10 = 1 + 0 = 1

これで無限の組み合わせが得られることに気がついたので、データを取得したい範囲に制限を設定する必要があります。これは私の組み合わせを見つけるために使用している現在のコードです。

def a(lst, target, with_replacement=False): 
    def _a(idx, l, r, t, w): 
     if t == sum(l): r.append(l) 
     elif t < sum(l): return 
     for u in range(idx, len(lst)): 
      _a(u if w else (u + 1), l + [lst[u]], r, t, w) 
     return r 
    return _a(0, [], [], target, with_replacement) 

for val in range(100,101): 
    s = range(1, val) 
    solutions = a(s, val) 
    print(solutions) 
    print('Value:', val, "Combinations", len(solutions)) 
+0

私たちにとってあなたの質問は何ですか? –

+0

私は、単一の整数に崩壊する数の組み合わせを見つけることを試みています。だから、n = 124は7に崩壊するでしょう。なぜなら、数= 7,1 + 2 + 4 = 7の整数の合計が7になるからです。この場合、数字124はn = 7に対して有効な組み合わせになります。もう1つの許容可能な組み合わせは、整数が7,6 + 0 + 1 = 7になるためです.Sameは余分な1285は1 + 2 + 8 + 5 = 16であり、1 + 6 = 7となるので許容できる組み合わせです。 –

+0

はい、あなたがしようとしていることを理解しています。しかし、私たちに何を求めていますか?あなたの目的を達成するコードを書くか、もっと具体的な質問がありますか? –

答えて

0

複数の問題があるようです。

の整数の小数点を1桁で繰り返して追加するには、このコードを使用します。

d = val 
while d > 9: 
    d = sum(int(c) for c in str(d)) 

これは、あなたの説明と同じように動作します。しかし、より簡単な方法があります。数値の小数点を繰り返し追加すると、casting out ninesとなり、その数値はdigital rootになります。これは、1ではなく、9の結果を得ることを除いて、9で除算したときの残りの数値とほとんど同じです。だから、簡単かつ迅速にコードが

d = val % 9 
if d == 0: 
    d == 9 

または多分

d = (val - 1) % 9 + 1 

または偶数以上-トリッキー

d = val % 9 or 9 

短いが、トリッキー7で終わるすべての番号を見つけることです(たとえば、1から9までの任意の数字)、残りの数字はすべて7を除したときには21034となる。したがって、7から始めて、9を追加し続け、そのような値をすべて取得します。

7のすべてのパーティションを見つけて数値に整理する方法は、必要以上に複雑で時間がかかります。あなたの現在のアプローチが最善かもしれ16で終わるすべての数字(例えば、または9より大きい任意の整数)を見つけるには

。それ以外の場合は、直接7または25に追加する数値を避けることは困難です。16を経由しないでください。これが本当にあなたが意味するものなら、あなたの質問でそう言えば、この状況をさらに見ることができます。

関連する問題