2017-10-06 32 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) ,但我想在整数格式