2017-10-06 46 views
0

我寫了一個python程序找到系列的組合打印輸出python程序基於間隔和組合

有一個骰子有6個面孔。

用戶輸入2

則顯示的出來是因爲沒有計數,其中兩個是來在組合

當然,如果我們拋出拿到2的總和最大的兩個骰子投擲需要骰子

(1+1) and (2) so count is 2 

如果我拋出的3總之,出賣出期權

(1+1+1),(1+2),(2+1),(3) so count is 4 enter code here 

,如果我拋出的4總和則放出來是

(1+1+1+1),(1+1+2),(1+2+1),(2+1+1),(2+2),(3+1),(1+3),(4) count is 8 

我寫的代碼是

# I am considering the Board is horizontal single line 

def count_values(values,num): 
    for i in range(num): 
     print(values[i]," ",end='') 
    print('') 

def print_list(out_put,values,num,count=0,show=False): 
    dice=6 
    if num == 0: 
     count_values(values,count) 
     out_put[0] += 1 
    elif num > 0: 
     for k in range(1,dice+1): 
      values[count] = k 
      print_list(out_put,values,num-k, count+1,show) 

n=int(input('Enter A number')) 

values=[0]*n 
out_put=[0] 
print_list(out_put,values,n) 
print(out_put) 

它顯示出來放了小投入喜歡10,20,30 但 我想輸出爲100和500和610樣輸入, 但是獲得更多時間(約5-6小時仍在運行)並且組合計數大於1145201564 還算 任何一個都有這個解決方案

任何人都有任何解決方案。此

+0

它看起來像你正在統計[分區](https://en.wikipedia.org/wiki/Partition_(number_theory))。如果您還需要生成它們,請參閱[此問題](https://stackoverflow.com/questions/400794/generating-the-partitions-of-a-number) –

+0

謝謝您的建議。但我通過使用numpy庫得到了一個解決方案,它放出非常快 –

回答

0
import numpy 

def findway(m,n,x): 
    table = numpy.zeros((2,x+1)) 
    for j in range(1,x+1): 
      table[1][j] = 1 

    for j in range(1,x+1): 
      for k in range(1,j): 
        table[1,j] += table[1][j-k] 

    print table[1][x] 

n=input('Enter a number') 
findway(6,1,n) 

但這裏也有一個問題,我想出來放了600,但它顯示出投入格式(2.07475778444e + 180) ,但我想在整數格式