2017-10-06 7 views
0

j'écris un programme en python pour trouver aucune des combinaisons de sériesimprimer le eteint du programme python basé sur Permituation et la combinaison

il y a un dé qui a 6 faces.

entrée 2

utilisateur

alors out est indiqué est qu'aucun de comptage où deux est venu dans des combinaisons

ex si on jette les dés pour obtenir 2 comme somme maximum sont deux dés jetés sont obligatoires

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

si je jette pour la somme de 3, l'out-put est

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

si je jette pour un montant de 4 alors mis en est

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

Je Recopiez le code est

# 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) 

il montre eteint pour les petites entrées 10,20,30 aime mais je veux la sortie pour 100 et 500 et 610 entrées similaires, mais est obtenir plus de temps (environ 5-6 heures encore en cours d'exécution) et le nombre de combinaison est plus de 1145201564 encore il est de compter tout le monde a une solution pour cela

Tout le monde a une solution. pour cette

+0

Il ressemble vous comptez [partitions] (https://en.wikipedia.org/wiki/Partition_ (number_theory)). Si vous avez besoin de les générer aussi, voir [cette question] (https://stackoverflow.com/questions/400794/generating-the-partitions-of-a-number) –

+0

Merci pour votre suggestion. mais j'ai eu une solution en utilisant une bibliothèque numpy, ça donne mettre très vite –

Répondre

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) 

mais ici est aussi un problème, je veux eteint pour 600, mais il montre hors mise en forme (2.07475778444e + 180) mais je veux en format entier