Random richtig einsetzten?

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Moin Leute,
    ich komm mal direkt zu Sache:


    Code
    new rnd = random(50)+1;
    new rnd2 = random(50)+1;

    Wie verhinder ich das rnd2 die gleiche Zahl wie rnd bekommt, aber trotzdem eine Zahl von 1-50, nur halt nicht die Zahl die rnd generiert hat.

  • Ich hab es mal so getestet und es kam nicht einmal vor, dass rnd und rnd2 gleich waren



    if(strcmp("/test", cmdtext, true, 10) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    new rnd = random(50)+1,
    rnd2= random(50)+1,
    rndstring[30];
    if(rnd2 == rnd)
    {
    rnd2=random(50)+1;
    }
    else
    {
    format(rndstring, sizeof(rndstring), "RND: %d ------ RND2: %d", rnd, rnd2);
    SendClientMessage(playerid, Weiss, rndstring);
    }
    }
    return 1;
    }

    Mit freundlichen Grüßen,
    Dachdecker

  • @Jeffry könntest du das bitte erklären?

    Klar.


    Wenn die beiden gleich sind, sagen wir, beide sind 14, dann wird auf die zweite Zahl gerechnet:
    14 + random(49)
    Das heißt es kommt eine Zahl zwischen 14 und 62 raus (0-48 möglich bei random).
    Die Zahl wird dann Modulo 50 genommen (Teilen mit Rest, Modulo gibt den Rest aus).
    Somit kommt eine Zahl von 14 bis 49 oder 0 bis 12 raus.
    Anschließend wird die Zahl noch +1 genommen, dann haben wir eine Zahl von 15 bis 50 oder von 1 bis 13. Also jede mögliche Zahl von 1 bis 50, außer der 14.


    Das kannst du mit jeder Zahl so durchspielen, klappt immer.

  • Hab jetzt diese Funktion erstellt, funktioniert auch alles gut soweit, nur wie sortiere ich die Zahlen jetzt aufwärts?

  • Die Methode klappt nur bei zwei Zahlen, da ja nur die erste Zahl ausgeschlossen wird.


    Für das was du vor hast musst du entweder eine Schleife nehmen, die sich solange wiederholt, bis die Zahl keiner der vorherigen Zahlen entspricht, oder einen anderen speziellen Algorithmus, da ich grade nicht am PC bin, kann ich dir den aktuell nicht schreiben.


    Zur Sortierung kannst du diese Funktion nutzen: http://forum.sa-mp.com/showpost.php?p=1085586&postcount=1737