C++ Arrays per Zufallsgenerator mit gleichen Zahlen füllen

JetStre4m

Lieutenant
Registriert
Nov. 2007
Beiträge
578
Hallo, ich programmiere in C++ und habe folgendes Problem:
Ich habe vier int-Arrays. Die ersten drei haben zehn int-Werte. Ich will die Zahlen später nach dem Schema Array1_1[1]+Array1_2[1] benutzen. Die kombination der beiden Zahlen darf sich nicht wiederholen, wenn also Array1_1[1]=10 und Array1_2[1]=15 ist, darf zwar Array2_1[1]=10 aber dann nicht Array2_2[1]=15 sein. Array1_1, Array1_2 und Array2_1 haben schon die ihre Werte. um dann Array 2_2 noch zu befüllen habe ich folgendes verfasst:
Code:
for(int i=0; i<=9; i++){
          next:
        Array2_2[i]=rand()% 16 +0;    //einen Zufallswert zuordnen//

        for(int j=0; j<=9; j++){
            if(Array1_2[j]==Array2_2[i]){      //Wenn kombination v. Array1 und 2 gleich dann
               if(Array1_1[j]==Array2_1[i]) goto next;    //prüfen ob auch Array 3 u. 4 gleich sind
            }
            if(j==i) j++;                                           
            if(j>i) break;
            if(Array2_2[j]==Array2_2[i]){     //überprüfen ob zwei eigene Kombinationen gleich sind
                if(Array2_1[j]==Array2_1[i]){
                   goto next;
                }
            }
        }
     }
Das funktioniert aber nicht, die Kombinationen wiederholen sich trotzdem. findet einer das Problem, bzw. eine Bessere Lösung?
mfg,
tXX
 
Generiere doch einfach 40 einzigartige Zufallszahlen (musst du dann in einem weiteren Array zwischenspeichern) und trage die dann in deine Arrays ein. Das dürfte einfacher und überschaubarer als das umständliches Konstrukt sein mit dem ich mich auch gar nicht näher befassen möchte.

Edit: ok, hab dein Problem falsch verstanden
 
Zuletzt bearbeitet:
Mal schauen ob ich dein Problem richtig verstanden habe. Ist es wirklich so einfach?:

Code:
for (int i=0; i<=9; i++) {  //sicher dass du <= möchtest?
   Array2_2[i]=rand()% 16 ;
   if ( (array1_1[i] +  array1_2[i]) == (array2_1[i] + array2_2[i]) ) {
     --i; continue;
   }
}
 
@jsowieso: Nein so einfach ist es eben nicht...
1. Ist das Bilden der Summe falsch
2. Gehst du davon aus, dass nur bei gleichem Index keine Dupletten sein dürfen

Mir fällt spontan aber auch keine wirklich elegante Lösung ein muss ich sagen... was vielleicht daran liegt, weil man nicht weiß, wofür die Zufallszahlen speziell gebraucht werden (das kann eine Rolle spielen bei der Implementiernug, muss es aber auch nicht unbedingt)


Bzw ich bin mir nicht 100% im Klaen, ob ich es richtig verstanden habe...
Also in deinem Arrays darf nie folgendes sein:
(Array1_1[x] == Array2_1[y]) und (Array1_2[x] == Array2_2[y])
Die Frage ist nun:
Darf folgendes sein:
(Array2_1[x] == Array2_1[y]) und (Array2_2[x] == Array2_2[y]) (mit x ungleich y)

In dem Fall würde das hier gehen:
Code:
	for(int i=0; i < 10; i++){
		int j;
		do {
			Array2_2[i]=rand()% 16 +0;    //einen Zufallswert zuordnen//

			for(j=0; j < i; j++){
				if ((Array1_1[j]==Array2_1[i]) &&
					(Array1_2[j]==Array2_2[i])) {
						break;
				}
			}
		} while (j < i);
	}
 
Zuletzt bearbeitet:
OK, also ich brauche die Arrays um Spielkarten festzulegen. Es gibt sieben Farben und von jeder Farbe gibt es die Zahlen 0-15. Diese Karten müssen auf vier Spieler verteilt werden, wobei logischerweise keine doppelt vorkommen darf. Ich hab mir das dann so gedacht: jeder spieler kriegt 2 Arrays. In Array1 werden die Farben gespeichert, in Array2 die Zahlen. Array1 und Array2 geben zusammen also EINE Karte. Das ganze dann noch für vier spieler , also acht arrays. Wenn jemand eine elegantere Lösung weiß, immer her damit:D

@1668: Nein, auch bedingung zwei geht nicht denn dann hätte ein spieler zwei gleiche Karten. Außerdem kann man eben nicht sagen j<i, denn dann würden ja z.B. nicht Array1[j] und Array2 mit j=9 und i=2 verglichen oder hab ich das falsch verstanden? Sorry, bin noch blutiger Anfänger, aber auf dem weg der Besserung:)
 
Hm. Ich habe nicht versucht irgendwelchen Code zu verstehen. Ich gehe nur vom letzten Post aus.

Du hast also 7 Farben mit je 15 Karten? Also hast du 105 Karten. Nun kannst du jeder Karte eine Nummer geben und sie Anhand dieser eindeutig Identifizieren.
Als Beispiel nehmen wir die Karte 97. Sie hat die Farbe 97 / 15 = 6 (abgerundet) und die Nummer 97 - ( 15 * 6 ) = 7.

Also musst du nur noch die Zahlen 1 bis 105 auf die vier Spieler aufteilen, und schon hast du die Karten verteilt.

Wahrscheinlich verstehe ich das vollkommen falsch, aber vielleicht konnte ich ja trotzdem helfen ;)

EDIT: 0 - 15 *denk* also 15 Karten... ÄÄÄH also mach das gleiche mit 16 Karten und ignoriere meine Blödheit...
 
Zuletzt bearbeitet:
Schande, Asche übermein Haupt :p Du hast das genau richtig verstanden, aber ich war zu blöd auf die einfachste Idee zu kommen*peinlich*:D Vielen Dank! Aber jetzt nur mal so aus Interesse, hat trotzdem jemand eine Idee wie man das mit den doppelten Arrays machen könnte? Also mein Hauptproblem ist jetzt Jedenfalls gelöst, vielen Dank nochmal...
mfg,
tXX
 
Zurück
Oben