Kezdőoldal » Számítástechnika » Programozás » Véletlen sorozat. Hogy?

Véletlen sorozat. Hogy?

Figyelt kérdés

Na van egy olyan feladat hogy generálni kéne egy sorozatot amelyben nem lehet 2 ugyanolyan elem.

Az hogy milyen hosszú,meddig lehet generálni azt bekérjük.

C nyelven.

Eddig jutottam:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <time.h>

#define N 1000

int main()

{

int T[N],i,j,szambol,szamot;

srand(time(0));

printf("Hany szambol szeretne kihuzni:");

scanf("%d",&szambol);

printf("Hany szamot szeretne kihuzni:");

scanf("%d",&szamot);

for (i=0;i<szamot;i++)

{

T[i]=rand()%szambol+1;

printf("%d ",T[i]);

}

i=0;

while(i<szamot-1)

{ j=0;

i++;

while(j<szamot)

{

if (T[i]==T[j] && j!=i)

{

T[i]=rand()%szambol+1;

}

else j++;



}



}

for(i=0;i<szamot;i++)

printf("\n%d ",T[i]);



return 0;


}



2013. dec. 7. 16:11
 1/8 anonim ***** válasza:

Szerintem kicsit túlbonyolítod. Amikor generálod a véletlen számot, akkor nézd át a T tömböt, hogy van-e már ugyanilyen és addig folytasd, amíg sikerült olyan generálni ami nem szerepel a T-ben.


Ha borzasztó nagy számokat lehet megadni, akkor lehet, hogy nem árt a tömböt rendezni.


Arra figyelj, hogy a "szamot" nem lehet kisebb mint a "szambol" mert különben nem teljesíthető a feladat (mindenképp lesz ismétlődés)

2013. dec. 7. 16:17
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:

Mit csinálsz most pontosan?


*Generálsz 5 random számot, kiírod

*Egyesével végignézed mindet minddel, ha megegyeznek újat generálsz

*Megint kiírod a számokat


Ez így nem fog működni. Ha pl. 2 számból kell 2-t választani és sorban 4-5-6-szor egyest generál a generátor, lesz 2db 1-esed. Simán előfordulhat.


4. Lenin módszere sok számból kevésre perfekt.

n-ből ~n-et pedig úgy tudsz "kiválasztani", hogy feltöltesz egy tömböt és random elemeket megcserélsz benne sokszor.

2013. dec. 7. 16:32
Hasznos számodra ez a válasz?
 3/8 A kérdező kommentje:
Na eddig még nem sikerült...
2013. dec. 7. 19:23
 4/8 iostream ***** válasza:

"Na van egy olyan feladat hogy generálni kéne egy sorozatot amelyben nem lehet 2 ugyanolyan elem."


Na, ez elég egyszerű:

int i = 0;

for (; i<AMEDDIG_GENERALNI_KOLL; ++i)

{

printf("%d\n", i);

}


Garantáltan nem lesz ismétlődés.

2013. dec. 7. 21:22
Hasznos számodra ez a válasz?
 5/8 A kérdező kommentje:

Bocsi azt nem írtam ki hogy VÉLETLEN sorozatot.

Amúgy már megcsináltam:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <time.h>

#define N 1000

int main()

{

int T[N],i,j,szambol,szamot,voltgen,voltcsere,temp;

srand(time(0));

printf("Hany szambol szeretne kihuzni:");

scanf("%d",&szambol);

printf("Hany szamot szeretne kihuzni:");

scanf("%d",&szamot);

for (i=0;i<szamot;i++)

{

T[i]=rand()%szambol+1;

}

i=0;

while(i<szamot-1)

{ j=0;

i++;

while(j<i)

{

if (T[i]==T[j])

{

T[i]=rand()%szambol+1;

voltgen=1;

}


else j++;



if (voltgen==1)

{

j=0;

voltgen=0;

}

}


}



for(i=0;i<szamot;i++)

printf("%d ",T[i]);



return 0;


}

2013. dec. 24. 09:40
 6/8 iostream ***** válasza:
Pont annyira véletlen a növekedő sorozat, mint a te sorozatod ;)
2013. dec. 24. 19:04
Hasznos számodra ez a válasz?
 7/8 A kérdező kommentje:

Hát én ahogy elnézem ez kiírja i értékeit.

Az i-t folyamatosan növeled 1-el.

Így kiíratod a számokat növekvo sorrendbe x-ig.

2013. dec. 25. 15:26
 8/8 iostream ***** válasza:
Próbáld ki, hogy az srand(time(0)); helyett srand(19); sort írod be, és futtasd le párszor. Mindjárt meglátod, miről beszélek.
2013. dec. 25. 17:47
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!