Frage von Fuchsi2001, 39

Random Zahlen von 1-100 erstellen?

Hallo Leute, ich lerne gerade cplusplus und möchte mit srand die zahlen zufällig von 1-100 ausgeben... Also jede zahl soll einmal vorkommen. Ich glaube mich zu erinnern dies vor einiger zeit schon einmal gesehen zu haben ohne das jemand unzählige if und while befehle genutzt hat weiß wer wie man dies am besten löst? Hoffe mir kann jemand helfen. Danke für alle Antworten!

Expertenantwort
von TeeTier, Community-Experte für programmieren, 22

Du willst also genau 100 Zufallszahlen erzeugen, im Bereich von 1 bis 100, wobei jede einzelne dieser Zahlen nur ein einziges mal vorkommt? Habe ich das richtig verstanden?

Wenn ja, dann evtl. so:

#include <algorithm>
#include <iostream>
#include <numeric>
#include <random>

#include <cstdint>
#include <cstdlib>

int main(void) {
using namespace std;

constexpr uint32_t lower = 1;
constexpr uint32_t upper = 100;

constexpr uint32_t seed = 12345;

vector<uint32_t> nums(upper);

iota(nums.begin(), nums.end(), lower);
shuffle(nums.begin(), nums.end(), minstd_rand{seed});

for (uint32_t &i : nums) {
cout << i << ' ';
}
cout << endl;

return EXIT_SUCCESS;
}

Die entscheidenden drei Zeilen habe ich mal fett hervorgehoben. Im Übrigen benutzt man rand() und srand() unter C++ nicht. Das gilt als veraltet, ungenau und allgemein schlechter Still ... davon abgesehen, ist es Fehleranfällig im Hinblick auf Multithreading und Zukunftssicherheit. Ich rate dir dringenst, sich mal anzugucken, wie die Klassen in <random> funktionieren! ;)

Ich hoffe, obige Lösung ist dir elegant genug, da sie ohne while- und if-Konstrukte auskommt, und nur 3 Zeilen umfasst. ;)

Naja, viel Spaß damit und einen schönen Tag noch! :)

Kommentar von Fuchsi2001 ,

Danke für die sehr hilfreiche Antwort! Und ja du hast definitiv recht GF ist wirklich sehr verbuggt... vor allem wird großteils bei den Updates nur wieder ein button entfernt und ein anderer hinzugefügt....

Antwort
von Suboptimierer, 27

Du könntest 100 beliebige Zufallszahlen generieren, sie den Zahlen von 1 bis 100 zuordnen und dann die Zufallszahlen sortieren. Über die Zuordnung hast du nun die Zahlen 1 bis 100 in zufälliger Reihenfolge.

Kommentar von Suboptimierer ,

Die brachiale Lösung ist natürlich, eine serielle Liste anzufertigen und immer dann eine Zufallszahl (1-100) anzuhängen, wenn sie bislang noch nicht in der Liste enthalten ist. 
Das machst du, bis die Liste 100 Elemente enthält.

Damit würdest du einfach "neu würfeln", wenn die gewürfelte Zahl bereits gewürfelt wurde.

Kommentar von TeeTier ,

Interessant. Ich habe die Fragestellung etwas anders interpretiert. Mal gucken wer am Ende richtig lag. :)

Kommentar von Suboptimierer ,

Ich kenne nur die Grundbefehle von C++ und als ich die kennen gelernt habe, dass ist schon ca. 15 Jahre her.

Deswegen kann ich nicht vergleichen und sehe nicht, was dein Code anders macht als meiner. Du scheinst auf jeden Fall schon Bibliotheken zu kennen, die viel Fußweg ersparen.

shuffle und fertig. ^^

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten