durchzählen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Frank86

Hallo! eine frage... Ich hab 4 variablen die werte zwischen 1 und 20 annehmen können... kennt wer ein verfahren, das alle kombinationsmöglichkeiten testet?
hab nämlich keinen plan wiedes gehn könnte :roll:
mfg
frank
Gast

also ich muss mich etz nochmal genauer ausdrücken:
ich will nicht nur alle kombis, sondern muss praktisch auch immer bei
1 1 1 1 anfangen.
und bei 20 20 20 20 aufhörn.
also zb so:
1 1 1 1
1 2 1 1
1 3 1 1
2 3 1 1
. . . .
. . . .
. . . .
20 20 20 20
also schonmal vielen dank für die antworten und lösungsvorschläge!
mfg
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Verschachtelung von Forschleifen?

Code: Alles auswählen

for i1 in xrange(1,21):
    for i2 in xrange(1,21):
        for i3 in xrange(1,21):
            for i4 in xrange(1,21):
                #deine Anweisung mit i1 i2 i3 i4
sind genau 160000 verschiedene Varianten (20^4).
Gast

ne also so krieg ich doch dann nur einen durchlauf.
ich will aber es machen dass ich alle möglichkeiten hab von 1 auf 20 zu kommen.
des müssten ein paar millionen sein oder noch mehr....
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Anonymous hat geschrieben:ne also so krieg ich doch dann nur einen durchlauf.
ich will aber es machen dass ich alle möglichkeiten hab von 1 auf 20 zu kommen.
des müssten ein paar millionen sein oder noch mehr....
Es sind genau 20 * 20 * 20 * 20 verschiedene Möglichkeiten = 20^4 =160000. Du kannst es ja mal austesten, indem du einfach einprint i1,i2,i3,i4 an die Stelle der Raute setzt.

Oder was meinst du sonst mit "ich will nicht nur alle kombis, sondern muss praktisch auch immer bei 1 1 1 1 anfangen. "

Milan
Gast

ähm also es könnte sein dass es doch geht ^^
melde mich später nochmal.
aber 160 000sind es nicht. weil es sind zwar 160 000 kombinationsmöglichkeiten, aber man muss noch bedenken dass es auch verschiedene hintereinanderschachtelungen mit den gleichen kombis gibt.
mfg
Gast

also ich versuch die aufgabe nochmal eindeutig zu stellen.
ich brauch alle durchläufe, die man mit dem startpunkt
1 1 1 1
und dem ziel
20 20 20 20
wenn immer nur eins zu einem addiert wird. :wink:
also wäre schön wenn mir wer helfen kann. der eine ansatz war schon gut. aber der zählt dann nur alle kombinationen auf, und zählt nicht von unten nach oben durch.
so also nochmal danke für eure bemühungen
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Milans Darstellungsweise hat mich auf die Idee gebracht. Fasse das Ganze doch einmal als Zahlensystem mit der Basis 20 auf. Zum Üben kannst du ja mal ins Zehnersystem zurückwechseln.

Allerdings einen Pferdefuss hat dein Zahlensystem. Der Wertebereich ist von 1..20 und nicht von 0..19! Das ist jetzt keine Lösung, schafft aber vielleicht Klarheit.

Hans
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Tut mir leid, ich versteh die Aufgabe immer noch nicht. Ist das eine Matheaufgabe, die du gerne durch "probieren" lösen willst? Wenn ja, kannst du die ruhig als solche stellen.

Andernfalls musst du mir mal nen Beispiel geben, wo das so durch for-Schleifen zählen nicht stimmt (da bin ich blind, weil meins ja auch bei 1 1 1 1 startet und bei 20 20 20 20 aufhöhrt) . Geht es dir um die Reihenfolge oder um die Gesamtanzahl?
Frank86

@milan
ich will mit nem kumpel einen bot für ein inet game programmiern.
dafür will ich ausrechnen wie man am besten aufbaut. :?
die resoourcen starten bei 1 und können auf 20 ausgebaut werden. es werden keine zahlen übersprungen.
ist es jetzt klarer auf was ich rauswill?
egal

vielleicht gibst du mal 20 Zahlenreihen vor,
wie du es dir vorstellst?

so. :!: oder so. :!:
1111 1111
1211 1121
1212 1131
1213 2131

geht es um die Reihenfolge
oder wie? :?:

Gruß
Gast

ok ich mach das mal:
die ausgabe sollte vielleicht dann so aussehen
1111
2111
3111
4111
4211
4311
4411
4421
4431
4441
4442
4443
4444
das wäre die erste(jetz mal nur bis 4 anstat 20)
die zweite sollte dann vielleicht so aussehen:
1111
2111
3111
4111
4211
4311
4411
4421
4431
4432 (<=hier wirds anders)
4442
4443
4444
aber das ist jetzt nur ein beispiel wie man es abändern könnte. ganz durchlaufen lassen kann ich das sowieso nie. weil das wären glaub ich so um die 4*10**27 möglichkeiten oder so......
aber wenn ich mal das system hab kann ichs auch eischränken.
schonmal danke dass ihr euch alle soviele gedanken macht :lol:
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Achso meinst du das. Die Anzahl der Kombinationsmöglichkeiten sollte doch ganz einfach sein und nicht 127000 :D Aber ein einfaches Zählen wie ich das Anfangs dachte ist es denn auch nicht.

Wenn ich das richtig erfasst habe, können die Variablen nur erhöht werden.

Var1 kann genau 20 vesrchiede Werte annehmen. Solange Var1 ungleich 20 ist, können die restlichen Variablen nur den Wert 1 haben. Anzahl = 20

Var2 kann wie Var1 20 verschiedene Werte annehmen. Solange Var2 ungleich 20 ist, können die restlichen Variablen nur den Wert 1 haben. Anzahl = Anzahl + 20 (Zwischensumme = 40)

Var3 kann auch nur 20 Werte annehmen. Solange Var3 -n nicht erreicht ist, kann var4 sich nicht ändern. Anzahl = Anzahl + 20 (Zwischensumme = 60) 0 < n < 19

Var4 kann erst neue Werte annehmen, wenn Var3 => 20 -n ist. Dadurch dass die Kombination Var3 mit Var4 n+1 mal vorkommen kann ergeben sich (n+1)*20 weitere Kombinationen. Anzahl = Anzahl + (n+1)*20

Habe ich das so richtig erfasst?

Hans
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

hans hat geschrieben:Var1 kann genau 20 vesrchiede Werte annehmen. Solange Var1 ungleich 20 ist, können die restlichen Variablen nur den Wert 1 haben.
Lass mal das nur weg. Die Vars sind bei I-Netspielen soweit unabhängig voneinander, hier gibt es meines Wissens dann nur 2 Regeln: es kann immer nur eine Variable erhöht werden und jede Variable kann hier max. 20 erreichen.

Problem: du hast auf einem Weg 160000 Schritte. Vertauscht du auf diesem weg dann einen Schritt mit einem anderen hast du wieder einen neuen Weg. Fertig, aus. Das lässt sich leider nicht so schön regeln. Vielleicht soltest du nicht fertige Wege austesten, sondern dir von unten einen aufbauen lassen, so wie man es dann auch im Spiel tuen würde: die ersten 5 Erhöhungen austesten, rechnen welche Vorteilhaft ist und mit dieser dann die nächsten 5 ausrechnen. So lässt sich der Aufwand in Grenzen halten.
frank86

genau milan hat das problem jetzt richtig erkannt.
ich denke ich lass das mit dem programm.
und machs von hand so wie milan sagt. danke für eure hilfe. werde mich bei neuen fragen wieder an euch wenden
mfg
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Was denn jetzt?

Ist die ursprüngliche Definition doch richtig? Dann hat Milan doch gleich die richtige Antwort gegeben (20^4). Das andere Beispiel hat dann leider etwas verwirrt.

Der Tipp mit dem Zahlensystem war dann wohl doch richtig. Nehmen wir an, du kannst jeweils denn Zustand 0 - 9 haben und hast vier Variablen, dass macht dann 10^4 = 10000 verschiedene mögliche Kombinationen. Genau so ist unser Zahlensystem aufgebaut. Und wenn man im Zehnersystem zählen kann, dann kann man das auf andere Zahlensysteme übertragen.

Hans
Frank86

nein in der letzten definition hat es milan getroffen.
schau sie dir nochmal genau an. sie unterscheidet sich von der ersten
mfg
Antworten