Sag mal wie hast du das so schnell hinbekommen?
Das ist reine Übungssache :) Allerdings war es zufällig auch mein erstes C-Programm mit Rekursion.
...Danach muss man natürlich jede Hexzahl in eine Dezimale wandeln.
Und dann muss mannur noch alle Zahlen mit doppelten Ziffern entfernen...
Allerdings hab ich mal noch eine Frage: Warum kommst du nur auf 362880 Möglichkeiten ? Es müssten doch 3628800 sein…
bzw. was meinst du mit "Da der Zähler voreilt…"?
Die Ausgabe des Zählerstandes erfolgt am Ende der For-Schleife für die erste Ziffer:
Code:
Print "Zwischenstand: " ; Nr ; " Kombinationen erzeugt"
Next N(1)
Decr Nr
Zu diesem Zeitpunkt sind alle Kombinationen die mit "0" anfangen generiert. Allerdings wurde die Nr-Variable schon für die nächste Runde erhöht, deshalb eilt der Zähler an dieser Stelle immer um 1 vor.
Ich denke, auch das Symmetrieproblem ist gelöst:
Code:
if(0) // 1 bedeutet: Ausgabe der Ziffernkombinationen
{
PrintInt(nr);
SerWrite(": ", 2);
for(y=0; y<ziffern; y++)
{
while(!(UCSRA & 0x20));
UDR = muster[y]+'0';
}
SerWrite(" ", 2);
for(y=0; y<ziffern; y++)
{
while(!(UCSRA & 0x20));
UDR = 9-muster[y]+'0';
}
SerWrite("\r\n", 2);
}
Damit kann man die äußerste Schleife im Hauptprogramm von 0 bis 4 laufen lassen und durch die Spiegelung der Werte wird der Bereich 5 bis 9 generiert.
Wozu kann man solche Kombinationen eigentlich nutzen?
Lesezeichen