Hogy lehet megcsinálni hogy a random számgenerátor ne ugyanazokat a számokat sorsolja ki?
pl.hogyha kisorsol egy számot 0-20 között akkor azt a számot mégegyszer ne használja fel.Itt tartok:
Random r = new Random();
int[] x= new int[1];
for (int y = 0; y < x.Length; ++y)
{
x[y] = r.Next(20);
Console.WriteLine(x[y]);
}
Console.ReadKey();
Csinálj egy 20 elemű tömböt, keverd össze (shuffle), és szép sorban random számokat fogsz kapni.
Vagy dobálj addig random számokat egy halmazba (set), amíg 20 méretű nem lesz.
Vagy tárold el a korábban generált számokat, és úgy generálj újat, hogy megnézed, van-e már (lineáris keresés): ha van, akkor újra generálsz, ha nincs, akkor eltárolod.
De egy szűk másfél órája már kérdezték ezt:
http://www.gyakorikerdesek.hu/szamitastechnika__programozas_..
Csak nem házi feladat?
Csak gondolkozz kicsit. Ha azt akarod, hogy ne sorsolja ki azt, amit már kisorsolt, akkor értelemszerűen tárolnod kell a már kisorsoltakat, és minden generálásról végig kell ellenőrizned, hogy a már kisorsoltak között van-e a most sorsolt szám, és ha igen, akkor újat sorsolnod. Viszont vigyáznod kell, nehogy végtelen ciklusba kerüljön, amikor már elfogytak a számok.
Viszont sokkal egyszerűbb és kézenfekvő megoldás erre a feladatra amit az első válaszoló írt, ha összekeversz egy 1-től 20-ig tartó számokat tartalmazó tömböt.
Érdekes sor :D
int[] x= new int[1];
Az egy egy elemű tömb... aminek sok értelmét nem látom... :)
...
Gondolj a lottó sorsolásra... Ha Tömb előző eleme létezik akkor, léptesse vissza a programot eggyel és próbálja újra :)
static void Main(string[] args)
{
int[] szamok = new int[20];
for (int i = 0; i < szamok.Length; ++i)
{
szamok[i] = i + 1;
}
Random r = new Random();
for (int i = szamok.Length - 1; i >= 0; --i)
{
int rnd = r.Next(0, i);
int temp = szamok[i];
szamok[i] = szamok[rnd];
szamok[rnd] = temp;
}
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!