Mulla on viisi satunnaislukua väliltä 1-52. Nyt tarvis jotenkin tarkistaa, että luvut ei ole samoja, osaako joku neuvoa. If-lauseilla tulee niin monta riviä, luulisi olevan helpompi ratkaisu.
Teen hommia BorlandBuilder5:lla eli C .
Teen hommia BorlandBuilder5:lla eli C .
Vastaukset 7
Vanhimmat
hidas:
arvo luku
tarkista löytyyko luku jo arvotuista (luvut taulukossa tms)
jos löytyy arvo uudestaan tarkista jne.
jo ei löydy -> ok, jatka eteenpäin
tilaa vievä:
arvot lukuja 1-52, tee vektori (taulukko tms), jossa kys. indeksit. tietotyypiksi vaikka boolean (true=arvottu jo, false="vapaa luku")
Jos käyttämäsi kieli ei alusta taulua, alusta taulu arvolla "vapaa luku"
aina kun arvot luvut, tarkistat taulusta, onko se vapaa. jos ei, arvot uusiksi jne. kunnes kaikki 5 on arvottu. Nopeampi konsti kuin eka mutta vaatii työtilaa.
2:n potensseille tiedän algorimin, joka antaa lukuja haluamallasi tavalla, mutta 52 ei valitettavasti ole 2:n potenssi :(
Helpompaa kuin lukujen tarkistaminen on valita satunnaisluvut siten, että sama luku voi esiintyä vain kerran. Laitat luvut 1-52 taulukkoon ja sekoitat sen...
http://keskustelu.suomi24.fi/show.cgi?category=108&conference=652&posting=21500000000193310
kiitoksia!!!
Nojoo tuo on ihan hyvä useiden lukujen arpomiseen mutta ehkä turhaa työtä sekoitella 52 numeron pakkaa saadakseen 3 numeroa?
Ei tämä iflauseviidakko niin karmea ole kuin voisi kuvitella:
int luku1=0, luku2=0, luku3=0;
int r;
while(1)
{
r = 1 rand()R;
// jos arvottu luku on jo ennestään arvotaan uusi
if( r==luku1 || r==luku2 || r==luku3 ) continue;
if( luku1 ) // luku1 on jo
if( luku2 ) // luku2 on jo
if( luku3 ) // luku3 on jo
break; // kaikki on, pois silmukasta
else luku3 = r;
else luku2 = r;
else luku1 = r;
}
}
Oho minulla on vissin lukihäiriö =) Lukuja olikin viisi no eikai se mitään haittaa..
Pakan ts taulukon "sekoittamiseen" on monta tapaa, ei siinä ole pakko tehdä turhaa työtä lainkaan, kuten aikaisemmin osoittamani linkin takaa selviää.
Iflauseviidakossasi on ainakin se huono puoli, että ohjelma voi teoriassa jäädä ikuiseen silmukkaan. Käytännössä näin ei tietenkään tapahdu, mutta...!
Iflauseviidakkoa voisi soveltaa vaikka seuraavasti:
unsigned i,j,luku[5];
for (i=0; i
Muistui mieleeni pari vanhaa juttua tältä palstalta:
http://keskustelu.suomi24.fi/show.cgi?category=108&conference=652&posting=10500000000003036
http://keskustelu.suomi24.fi/show.cgi?category=108&conference=652&posting=20500000000391019