Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 05:40

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



rand()%100 ohne doppelte Zahlen

Discussion on rand()%100 ohne doppelte Zahlen within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
lolxdflyx3's Avatar
 
elite*gold: 0
Join Date: Jul 2011
Posts: 331
Received Thanks: 65
rand()%100 ohne doppelte Zahlen

Hi,
ich brauche Zufallszahlen, die nicht doppelt vorkommen!
Lässt sich sowas unkompliziert machen, z.B. im srand()?
Bis jetzt habe ich es so versucht zu lösen, leider ohne Erfolg

Code:
    int zahlen[6];
    bool doppelt;
    int zs, i1;
Code:
        srand(i1); //i1 ist Zähler aus for-schleife
        for(int i=0; i<=5; i++)
        {
            while(doppelt==true)
            {
                doppelt=false;
                zs=(rand()%99)+1;
                for(int i2=0; i2<=i; i2++)
                {
                    if(zahlen[i2]==zs)
                    {
                        doppelt=true;
                    }
                    else
                    {
                        zahlen[i]=zs;
                    }
                }
            }
        }
Der Code-Auschnitt befindet sich in einer For-Schleife!

lolxdfly
lolxdflyx3 is offline  
Old 11/08/2013, 18:47   #2
 
Hiris's Avatar
 
elite*gold: 99
Join Date: Apr 2011
Posts: 730
Received Thanks: 236
Pack zahlen die schonmal vorgekommen sind in einen std::vector und prüf einfach nach jedem random ergebniss ob es sowas bereits im vector gibt
Hiris is offline  
Old 11/08/2013, 20:54   #3
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Du könntest std::random_shuffle verwenden (in algorithm). Damit könntest du eine Liste der ersten hundert (oder sechs) Zahlen mischen und dann der Reihe nach durchgehen. Wenn du mehr als nur ein paar Elemente benötigst, ist das effizienter, als die bereits verwendeten Zahlen zu speichern.
Tasiro is offline  
Old 11/09/2013, 10:25   #4
 
Raz9r's Avatar
 
elite*gold: 297
Join Date: Dec 2010
Posts: 1,129
Received Thanks: 1,687
std::set kann dabei helfen. Und ich erinnere an einen Talk von STL: "rand() considered harmful".
Raz9r is offline  
Old 11/09/2013, 15:50   #5


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Originally Posted by Hiris View Post
Pack zahlen die schonmal vorgekommen sind in einen std::vector und prüf einfach nach jedem random ergebniss ob es sowas bereits im vector gibt
Ich würde mal behaupten, dass das im Worst Case die Laufzeit stark erhöht.
Ich würde eher einen Vector mit den Zahlen 1-100 füllen und den Random Wert als Index dafür verwenden. Nach Verwendung einer Zahl wird diese aus dem Vektor entfernt.
Logischerweise wäre es dann auch (rand() % (vec.size() - 1)) +1 damit man die Grenzen nicht überschreitet.
MrSm!th is offline  
Old 11/09/2013, 16:11   #6
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Quote:
Originally Posted by MrSm!th View Post
Nach Verwendung einer Zahl wird diese aus dem Vektor entfernt.
Mit dem letzten Wert des Vektors überschrieben und der Vektor um ein verkleinert.
Tasiro is offline  
Old 11/09/2013, 18:10   #7


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Quote:
Originally Posted by Tasiro View Post
Mit dem letzten Wert des Vektors überschrieben und der Vektor um ein verkleinert.
Stimmt, das würde es noch optimieren. Vector ist aber ohnehin schon ziemlich fix.
MrSm!th is offline  
Old 11/09/2013, 18:18   #8
 
elite*gold: 0
Join Date: Aug 2012
Posts: 236
Received Thanks: 94
Nicht, wenn du nach und nach jedes einzelne Element aus der Mitte entfernst und dann alle anderen Elemente danach verschieben musst. Damit bist du wieder in O(n²).
Tasiro is offline  
Old 11/09/2013, 18:52   #9
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Hast vollkommen recht, Tasiro. Bei 100 Elementen von primitven Datentypen wird das aber nicht ins Gewicht fallen (die werden sowieso blitzschnell kopiert).
Falls der Inhalt auch noch in den Cache gepackt wird, geht der Unterschied wahrscheinlich sogar steil gegen 0.
Schlüsselbein is offline  
Reply

Tags
c++, doppel, srand, zahlen


Similar Threads Similar Threads
Mehrere Fenster aber ohne Rand?
01/24/2013 - World of Warcraft - 3 Replies
Huhu, ich wollt mal fragen ob jemand weiss wie man das machen kann wenn man mehrere BotFenster aneinander hat das der Rand davon weg ist? Hoffe einer kann mir da weiter helfen Danke Gruss ;)
namen ohne zahlen
11/05/2010 - WarRock - 4 Replies
hallo leute wollte nur bescheid sagen dass man zurzeit namen ohne zahlen machen kann^^ ging ja ne derbe lange zeit nicht
Nickname ohne Zahlen?
10/27/2010 - WarRock - 5 Replies
Ich wollt gerne wissen ob es möglich ist bei der Regestrierung den Nick auch ohne Zahlen zu benutzten können.
[Bug] Handeln ohne zahlen
08/30/2010 - WoW PServer Exploits, Hacks & Tools - 9 Replies
Hallo Leute... Es ist nicht direkt ne Frage aber ich muss zugeben i.wie schon^^ Und zwar habe ich auf mol*en (darf man hier server nennen?^^) mit einem Spieler gehandelt. Er wollte 2 Froststofftaschen und eine Robe. Er bestand aber unbedingt darauf (ausrede war er hätte kein Platz im Inventar) das ich ihm zuerst die Taschen gebe. Dort kams mir schon komisch vor weil es einmal wie unterbrochen wurde. Dann die Robe: Ich packte die Robe ins >NEUE< Handelsfenster und er sein Gold. Wir...
Button ohne rand + ein/aus
02/10/2010 - AutoIt - 10 Replies
hai leuts ich bin mal wieder am cooden und möchte gerne einen button haben, welcher 1. den gepunkteten rand nicht hat (immer wenn man ein button anklickt gibts doch so einen gepunkteten rand ... den will ich weg ^^) und 2. sollte er wenn man drauf klick "drinne bleiben" also gedrückt bleiben und wenn man nochmal drauf klick, sollte er wieder raus gehen ^^ ich hoffe ihr versteht was ich meine. hab mir in der help datei die parameter angeschaut... aber i-wie nix gesehen ^^ wär suppi...



All times are GMT +1. The time now is 05:40.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.