簡體   English   中英

查找或生成從 0 到 8^10 的所有八進制數,其數字和等於 x

[英]find or generate all octal numbers from 0 to 8^10 that digit sum is equal to x

因此,給定 0o11110000000 base 8 的輸入('0o' 被忽略),我必須生成並計算在添加各個數字時它們相同的可能數字。 例如

  • 0o1111000000: 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 = 4
  • 0o0000001111: 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 = 4
  • 0o0000000201: 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 1 = 3

所以對於 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM