Hallo Searcher
Deine Lösung funktioniert leider auch nicht richtig, weil sie nicht alle Ziffern von '0' bis 9' berücksichtigt. Ausgabe deiner Variante:
Code:
0123
0132
0231
0213
0312
0321
1230
1203
1302
1320
1023
1032
2301
2310
2013
2031
2130
2103
3012
3021
3120
3102
3201
3210
24
Kombinationen und Anzahl der Kombinationen. Richtig wäre 10*9*8*7=5040 Kombinationen. Hier die Kombinationen mit drei Stellen:
https://www.roboternetz.de/community...2&d=1312105805
Gruß
mic
[Edit]
Das C-programm macht genau desselbe wie die Bascom-Variante. Es wird ein Array mit der Anzahl der gewünschten Stellen erzeugt und jede Stelle nacheinander mit allen Werten ausprobiert. Wenn der Wert für die aktuelle Stelle schon im Array vorhanden ist, wird dieser Wert übersprungen. Wenn man mit dem Wert für die erste Stelle startet, kann man alle weiteren Stellen mit dem selben Algorithmus errechnen:
Code:
void suchen(uint8_t z) // z ist der Index im Array, es wird also die z-Stelle erzeugt
{
for(x[z]=0; x[z]<10; x[z]++) // Werte von 0 bis 9 erzeugen
{
gefunden=0; // flag wird gestezt, wenn Wert schon im Array erhalten ist
for(y=0; y<z; y++) if(x[y]==x[z]) gefunden=1; // Alle Elemente im Array vor aktuellem Index prüfen
if(!gefunden) // Wenn der Wert erstmalig im Array auftritt wird er im Array unter dem aktuellen Index espeichert
{
if(z < (ziffern-1)) suchen(z+1); // Rekursion! // Wenn noch nicht alle Stellen berechnet sind wird die nächste Stelle berechnet
else
{
ausgabe(); // Ausgabe der Ziffernkombinationen in x[0] bis x[ziffern-1]
nr++;
}
}
}
}
Lesezeichen