C Programm-Zufallszahl soll nicht doppelt sein

Hi Leute!

Meine Frage besteht darin, das ich ein C-Programm erstellen soll, indem Zufallszahlen zwischen 0 und 16 erzeugt werden sollen. Diese aber nicht doppelt vorkommen dürfen

Ich habe ein Feld: spielfeld [3][3], welches ich mit folgendem Quelltext fülle:

srand(time(NULL));
int i,j,s;

for ( i = 0; i

im einfachsten fall speicherst du die gefundenen in ein array
und durchsuchst es bei jeder neuen zufalls zahl.

willst du zufalls auswahl , zb weil verschiedene symbole .

dann kann man die in ein array packen
ein zweites array zum markieren der benutzten.

es ginge auch noch ein array aus möglichen zufalls zahlen ,
zufall im bereich des array index
und jweils genutzte aus dem array entfernen .
wiederholen bis array leer :smile:

der vorteil , es wird auf jedenfall bei jedem durchgang eine zufallszahl ermittelt , und es gibt keine zufälle die man wegschmeissen muss. Nachteil , die Menge der Zufallselmente muss vorher definiert werden.

Hi,

Es geht dir schon um Integer, also 0,1,…,15?

das, was du suchst, nennt sich „Permutation“. Du erzeugst dir ein Array mit Zahlen zwischen 0 und 15 und führst dann diverse Tauschvorgänge aus.

nur so als dumme Nachfrage: du meinst wirklich C und nicht C++, richtig? In C++ gäbe es eine sehr einfache Implementierung in der Standardbibliothek, aber mit C kenne ich mich da nciht so genau aus…

viele Grüße
Felix

Hi erstmal danke für die schnelle Antwort.
Den ersten Vorschlag den du gemacht hattest, die Zufallszahlen in ein Array zu packen, hatte ich auch schon, jedoch hapert es etwas an der Umsetzung in C. vielleicht könntest du mir einen antsupser geben, wie ich im array prüfen kann, ob die aktuelle zufallszahl im array existiert. DANKE

Hi danke für die Antwort.
…und ja das Array ist als integer deklariert.
zum zweiten mit dem mischen, es wäre eine Alternative, jedoch soll ich eine belliebige zufallszahl erzeugen und pruefen ob diese schon im array vergeben ist, falls ja, neue Zahl und pruefen usw.

…und ja es soll leider zu ca 98% nur C - Quelltext sein.

Ironman 207

Also ich bin auch C++ler

Aber du brauchst ein dynmaisches array , den es kommen ja immer welche dazu .

dann machst du ein boolean setzt den auf false

gehts das ganze array durch , wenn wertzufall == wertarray dann boolean auf true .

wäre also pseudocode

found = 0
maxtofind = 16
random\_min = 1
random\_max = 15
while (found 

fals dir die feste array länge mehr zusagt

found = 0
maxtofind = 16
random\_min = 1
random\_max = 15
array(maxtofind) = (NULL,NULL,NULL,NULL,NULL,
 NULL,NULL,NULL,NULL,NULL,
 NULL,NULL,NULL,NULL,NULL,
 NULL)
while (found 

Das Permutieren ergibt, wenn es denn richtig(!) gemacht wird, auf jeden Fall die handwerklich besseren Lösungen.

Aber wenn Du die Vorgabe mit dem Vergleich hast, solltest Du die gemachten Vorschläge als Anhaltspunkt nehmen. (Obwohl mir dort auch noch zahlreiche Optimierungsmöglichkeiten einfallen.)

Für eine Arraygröße von 15 spielt das alles keine Rolle. Würde man aber einige Tausend Werte erzeugen, käme deutlich heraus, welche Implementierung vom Laufzeitverhalten her gut oder schlecht ist.
Dann merkt man nämlich, dass die Laufzeit je nach Vorgehen mal Sekunden oder mal Tage dauert.

Ciao, Allesquatsch