Ein Array per Zufall in ein anderes kopieren

moin


Und du hast das Problem doch nicht verstanden!
gleicher länge die du mit den selben zufallszahlen füllst

Es geht nicht ums kopieren, sondern um das erzeugen von 15 verschiedenen Zufallszahlen die zwischen 1 und 15 liegen, von denen keine doppelt vorkommen darf.


mfg
umbrasaxum
 
Zuletzt bearbeitet:
moin


Hab es jetzt mal auf konventionelle Art gemacht.
Es würde so reichen wie es jetzt ist, aber man kann schon sehen das er ein wenig brauchst.


mfg
umbrasaxum
 
Du scheinst die Lösung nicht verstanden zu haben, die Zufallszahlen sind die Plätze die die zufällig erzeugten Zahlen im 2ten tmp array nach dem sortieren erhalten haben.


tmp1={45,78,12,98,55}
tmp2=tmp1;
sortier tmp2 beliebig
45 ist in tmp1 auf pos 0
such 45 in tmp2
aha ist auf pos x in tmp2

=>kartenstapel2[x]=kartenstapel1[0]
 
Hi ...

Also meine Idee ist garnicht so schwer umzusetzen, ne einfache Rekursion ...

Code:
void zufall(int min,int max)
{
	int num = min + rand()%(max-min);
	// setze wert auf position 'num' des arrays
	
	zufall(num+1,max);
	zufall(min,num-1);
}

das muss man natürlich mit einigen If-Abfragen verschönern um Fehlern aus dem Weg zu gehn ...
Aber wenn ich mich nicht irre, würde das so gehen ...
Aber ist ja deine sache ;)

Gruß
Shai
 
moin


@Shaijan
Rekursion, ash das doch gleich ;)
Hmm, ich denke das diese "Sicherheits und Problemverbeugenden IFs" die ganze Sache sehr aufwendig machen würden.

Dann lieber mit dem Kopf durch die Wand.


mfg
umbrasaxum
 
moin


@Tritop
Ich denke ich hab es fast verstanden, aber du musst doch dann trotzdem sicherstellen das keine Zahlen doppelt vorkommen?!


mfg
umbrasaxum
 
Ich muss zugeben ich habe jetzt nicht alles gelesen und weiss nicht ob das was ich jetzt schreibe schon vorgeschlagen wurde. Außerdem ist das was ich schreib eigetnlich recht plump also nicht darueber aufregen wenn das zu stumpf ist.

Code:
srand(time(NULL));
const int n=15;
int a[n];

for  (int i=0;i<n;i++)a[i]=i+1;

for (int i=0;i<n;i++){
    int x=rand()%n;
    int y=rand()%n;

    int tmp=a[x];
    a[x]=a[y];
    a[y]=tmp;
}

so kannst du dir theoretisch (ungetestet) ein gewissermaßen Zufallsarray basteln und dann
theoretisch, wenn noetig noch in das andere array kopieren (wobei man das glaub ich mit dieser methode vernachlaessigen kann.
Ich hoffe mal das es minimal weiterhilft.
 
moin


Die Idee ist garnicht schlecht.
Nur das ich so nciht sicherstellen kann das möglichst alle getauscht werden, wenn eins oder zwei nciht getauscht werden wäre es auch nciht schlimm, aber mehr währen dann wieder schlecht.


mfg
umbrasaxum
 
Da hast du natürlich recht, wobei sowas natürlich theoretisch bei einem Kartenspiel passieren kann. Kannst ja einfach die anzahl wie oft getauscht wird auf n^2 setzen :)
 
Zurück