Véletlen sorozat. Hogy?
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;
}
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)
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.
"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.
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;
}
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.
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!