Array
-
hallo,
ich hab folgendes problem:
wie kann ich, wenn ich einen, zum beispiel 4 felder vom typ integer großen array habe, und an zweiter stelle eine zahl z.B eine 3 (zwischen 1..4 (feldergröße)) steht, alle kombinationen der "restlichen" zahlen (hier dann: 1, 2, 4) auf den anderen positionen des arrays ausgeben, oder in eine datei schreiben.
int array[3];
array [1]=3;
..soll folgende ausgabe erzeugen:
1 3 2 4
1 3 4 2
2 3 1 4
2 3 4 1
4 3 1 2
4 3 2 1danke
-
du willst permutationen, richtig?
vielleichtkannst du aus diesem python code die logik rausziehen:
def permutations(seq): if not seq: return [seq] else: res = [] for i,item in enumerate(seq): subseq = list(seq[:]) subseq.pop(i) for pseq in permutations(subseq): res.append(pseq + [item]) return res
edit: der code war falsch. kommt davon, wenn man aus dem inet kopiert anstatt selber zu schreiben.
-
das mit den permutationen ist schon richtig..
sorry, aber den code-schnipsel versteh' ich leider nicht..
-
ich uebersetz es mal in einen algemeinen algorithmus...
funktion permutationen(liste A): wenn A nur ein element hat, dann: gib eine liste mit A als einzigem element zurueck (nur eine permutation) sonst: ergebnis wird als leere liste initialisiert fuer jedes <element> von A tue das: <rest> ist eine liste mit allen restlichen elementen von A (also <element> fehlt) <permutiert> ist der rueckgabewert, wenn man permutationen(<rest>) aufruft fuer jede teilpermutation in <permutiert>... fuege <element> an die teilpermutation an und haenge die liste dem ergebnis an ergebnis zurueckgeben
ist eine mehr oder weniger woertliche uebersetzung des python codes.
den c code dazu schreibe ich dir nicht, weil das deine aufgabe ist.
du brauchst aber sicher malloc() und free() und einige for-schleifen und vielleicht noch ein paar structs.
-
dankeschön,
hab es jetzt so hier gemacht hab bloß folgendes problem (siehe Kommentare im Quelltext).
#include <stdio.h> int main() { int u, i, k, l, m, n, feld[20][3]; u=0; i=1; k=1; l=1; m=1; n=3; for (i=1;i<=4;i++) { for (k=1;k<=4;k++) { for (l=1;l<=4;l++) { for (m=1;m<=4;m++) { if(k==n && i!=k && k!=l && l!=m && i!=l && k!=m && i!=m) { printf("(%i) %i : %i : %i : %i\n", u, i, k, l, m); [b]// warum gibt er mir die werte, die er hier ausgibt...[/b] feld[u][0]=i; feld[u][1]=k; feld[u][2]=l; feld[u][3]=m; u=u+1; } } } } } u=u-1; for (i=0;i<=u;i++) { printf ("%i : %i : %i : %i\n", feld[i][0], feld[i][1], feld[i][2], feld[i][3]); [b]// ..nicht hier nochmal aus ?!? [/b] } }
-
also habs grad ma compiliert un bei mir gibt er es 2mal aus .
Edit:
Ausgabe:(0) 1 : 3 : 2 : 4 (1) 1 : 3 : 4 : 2 (2) 2 : 3 : 1 : 4 (3) 2 : 3 : 4 : 1 (4) 4 : 3 : 1 : 2 (5) 4 : 3 : 2 : 1 1 : 3 : 2 : 1 1 : 3 : 4 : 2 2 : 3 : 1 : 2 2 : 3 : 4 : 4 4 : 3 : 1 : 4 4 : 3 : 2 : 1
-
die ersten drei schon, aber auch jeweils die letzte zahl?!
naja, da hat er dir aber auch zweimal was verschiedenes ausgegeben, aber ich glaube ich weiß jetzt woran es liegt, ich hab den array feld bis 3 deklariert, ich hätte ihn bis 4 deklarieren sollen..
trotzdem danke