2017-10-06 1 views
0

ich ein Programm in Python schreiben keine Kombinationen von Seriedie von Python-Programm löschte drucken basierend auf Permituation und Kombination

gibt es einen Würfel zu finden, die 6 Gesichter hat.

Benutzereingabe 2

dann wird das aus ist, da keine der Zählung gezeigt, wo zwei in Kombinationen kommen wird

ab, wenn wir Würfel die maximal zwei Würfel geworfen sind erforderlich, um zu bekommen 2 als Summe für werfen

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

, wenn ich für Summe von 3 werfen, die out-Put ist

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

, wenn ich für Summe von 4 werfen dann setzen die aus ist

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

Ich schreibe der Code ist

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

es put für kleine Eingänge zeigt out mag 10,20,30 aber ich will die aus für 100 und 500 und 610 wie Eingänge setzen, aber mehr Zeit bekommen (etwa 5-6 Stunden laufen noch) und die Anzahl der Kombination mehr als 1145201564 noch ist irgendeine hat Lösung für dieses

Zählen

Jeder hat irgendeine Lösung. für diesen

+0

Es sieht aus wie Du zählst [Partitionen] (https://en.wikipedia.org/wiki/Partition_ (number_theory)). Wenn Sie sie auch generieren müssen, lesen Sie [diese Frage] (https://stackoverflow.com/questions/400794/generating-the-partitions-of-a-number) –

+0

Vielen Dank für den Vorschlag. aber ich habe eine lösung mit numpy library, es gibt sehr schnell –

Antwort

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) 

aber hier ist auch ein Problem, ich will put für 600, aber es zeigt out-put in Format (2.07475778444e + 180) , aber ich möchte in Integer-Format

Verwandte Themen