![](/img/trans.png)
[英]how to generate a list of 3-digit numbers the sum of their digits equal 17?
[英]find or generate all octal numbers from 0 to 8^10 that digit sum is equal to x
因此,給定 0o11110000000 base 8 的輸入('0o' 被忽略),我必須生成並計算在添加各個數字時它們相同的可能數字。 例如
所以對於 0o0000000001 的輸入我應該得到 10 的答案
0000000001
0000000010
0000000100
0000001000
0000010000
0000100000
0001000000
0010000000
0100000000
1000000000
我的方法是一種非常非常蠻力的方法,我必須檢查從 0 到 7777 7777 77 base8 的每個可能的數字。 它使用八進制數的十進制表示,我使用遞歸 function 來檢索一個數的八進制和
我該如何改進它才能更快。 如果可能的話,沒有 python 模塊,因為我懷疑運行該程序的機器無法導入很多東西
def sum_of_octal_digits( n ):
if n == 0 :
return 0
else:
return int(n) % 8 + sum_of_octal_digits( int(n / 8) )
octInput = input("Enter hex: ")
int_octInput = int(octInput , 16)
total = sum_of_octal_digits(int_octInput )
allcombinations = list()
for i in range(pow(8,len(e[2:]))):
if sum_of_octal_digits(i) == total :
allcombinations.append(i)
print(len(allcombinations))
您正在計算總和為 t 的長度為 n 的 {0, 1, 2, 3, 4, 5, 6, 7} 的序列數。 將該值S[n, t]
。
S[n, t]
滿足一個遞歸關系:
S[0, 0] = 1
S[0, t] = 0 (t != 0)
S[n+1, t] = sum(S[n, t-d] for d=0...min(t, 7))
一旦你有了遞歸關系,使用動態規划解決問題就很簡單了(通過使用記憶,或使用自下而上的表方法)。
該程序應該在 O(nt) 時間內運行並使用 O(nt) 空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.