C :: Aufgabe #96 :: Lösung #1
2 Lösungen
#96
Möglichkeiten der Objektanordnung
Anfänger - C
von Veigar
- 17.12.2015 um 11:25 Uhr
Liebe Community!
Schreibe ein kleines Script das für eine beliebige Menge Objekte alle Möglichkeiten diese anzuordnen ausgibt! (Nicht einfach nur die Anzahl der Möglichkeiten, eine funktion für fakultät zu schreiben ist bedeutend einfacher!)
Beispiel:
Eingabe: "rot,"blau","schwarz"
Ausgabe:
"rot,"blau","schwarz"
"rot","schwarz","blau"
"schwarz","rot",blau"
"schwarz","blau","rot"
"blau","schwarz","rot"
"blau","rot","schwarz"
Verzichtet bitte darauf ganz simpel einfach alle möglichen Ketten mit der gegebenen länge und den gegebenen Zuständen darauf zu untersuchen ob alle Objekte untereinander ungleich sind (Also nicht erst auch Zustände wie "schwarz",schwarz","schwarz" in eine innere Auswahl bringen und dann filtern) um (für große Aufgaben) die Rechenzeit gering zu halten!
Grüße!
Schreibe ein kleines Script das für eine beliebige Menge Objekte alle Möglichkeiten diese anzuordnen ausgibt! (Nicht einfach nur die Anzahl der Möglichkeiten, eine funktion für fakultät zu schreiben ist bedeutend einfacher!)
Beispiel:
Eingabe: "rot,"blau","schwarz"
Ausgabe:
"rot,"blau","schwarz"
"rot","schwarz","blau"
"schwarz","rot",blau"
"schwarz","blau","rot"
"blau","schwarz","rot"
"blau","rot","schwarz"
Verzichtet bitte darauf ganz simpel einfach alle möglichen Ketten mit der gegebenen länge und den gegebenen Zuständen darauf zu untersuchen ob alle Objekte untereinander ungleich sind (Also nicht erst auch Zustände wie "schwarz",schwarz","schwarz" in eine innere Auswahl bringen und dann filtern) um (für große Aufgaben) die Rechenzeit gering zu halten!
Grüße!
#1
von devnull (8870 Punkte)
- 23.12.2015 um 21:59 Uhr
Konsolenausgabe:
$ ./objekte rot blau schwarz
rot blau schwarz
rot schwarz blau
blau rot schwarz
blau schwarz rot
schwarz rot blau
schwarz blau rot
/************************************
* objekte.c Objektanordnung
************************************/
#include <stdio.h>
#define MAX_ARGS 10
static int stack[MAX_ARGS+1];
static int free[MAX_ARGS+1];
static int pstack = 1;
static int level = 1;
/* einfacher Stack fuer Array-Indices */
void push(int index) {
if (pstack <= MAX_ARGS) {
free[index] = 1;
stack[pstack++] = index;
}
}
void pop() {
int index;
if (pstack > 1) {
index = stack[--pstack];
free[index] = 0;
}
}
void print_stack(char **argv) {
int i;
for (i=1; i<=pstack; i++)
printf("%s ", argv[stack[i]]);
printf("\n");
}
/* Rekursive Funktion: Objekte anordnen */
void objekte_anordnen(int argc, char **argv) {
int n;
for (n = 1; n<argc; n++) {
if (free[n] == 0) {
push(n);
level++;
objekte_anordnen(argc, argv);
if (level == argc-1)
print_stack(argv);
level--;
pop();
}
}
}
/* main */
int main(int argc, char **argv) {
if (argc > 2 && argc <= MAX_ARGS+1)
objekte_anordnen(argc, argv);
else
printf("Anzahl Objekte muss zwischen 2 und %d liegen!\n", MAX_ARGS);
return 0;
}
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
