Tein ohjelma joka arpoo halutun määrän 7 numeron lottorivejä ,ongelmana en saa mitenkään poistettua sitä ettei se arpoisi samaan riviin samoja numeroita.Mikä avuksi?
arpominen
Jjp
132514
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 13
Vanhimmat
Tämä ongelma tuntuu putkahtavan esiin aina säännöllisin väliajoin. Tietokoneen satunnaisllluvut eivät ole "oikeasti" satunnaisia ennen kuin satunnaislukugeneraattori on alustettu jollain aidolla satunnaisluvulla.
Käytä alustukseen esim. koneen kellonaikaa, käyttäjän vasteaikaa tms.
Tossa yksi googlettamalla löytynyt esimerkki:
If you want different seeds everytime you could use the current time. So you would do something like this:
#include
srand(unsigned(time(NULL)));
Then you will get different numbers from rand() every time without having to specify a seed value.
Pitää laittaa jo arvotut numerot jemmaan taulukkoon tai muuttujiin ja tarkistaa itse tuplat sekä arpoa tarvittaessa uudelleen. Oikotietä ei ole.
Edellä toisessa vastauksessa olikin jo tärkeä huomio satunnaislukujen satunnaisuudesta. Tarkista siis, että annat satunnaislukugeneraattorille jonkun satunnaisluvun (!!!, heh, heh ¿¿¿¿¿¿¿)siemeneksi, muuten generaattori arpoo joka suorituskerta samat lottonumerot.
Teet taulukon, jossa on kaikki numerot, jotka voidaan arpoa (eli ilmeisesti 0-39). Teet myös muuttujan, joka kertoo kyseisen taulukon koon. Nyt arvot jonkun numeron väliltä 0-"taulukon koko", otat numeron tuosta arvotusta taulukon indeksistä, siirrät taulukon viimeisen alkion ("taulukon koko" -1) tuohon indeksiin, ja pienennät "taulukon koko"-muuttujaa yhdellä. Ja sitten teet saman uudestaan niin monta kertaa, kuin haluat numeroja.
http://keskustelu.suomi24.fi/show.fcgi?category=108&conference=4500000000000140&posting=22000000004078532
Tuota sovellat.
http://www.fredosaurus.com/notes-cpp/misc/random-shuffle.html
#include
#include
#include
using namespace std;
#define MAXNRO 39 // muistaakseni
#define MAXSAR 6 // - " -
int main()
{
int lottokuponki[MAXNRO];
int maxnro = MAXNRO;
int i, nro, tmp;
srand(time(0)); // alustetaan 'sattuna'
for (i=0; i
Lottorivin generoinnin voi tehdä monella tavalla ja sinulla toteutettu ihan näppärästi. Kuitenkin heitän pari kommenttia.
Ohjelma tarjoaa myös 0:a lottorivin nroksi.
Sama lottonro voi esiintyä toistamiseen. (?)
Sama lottonro EI esiinny toistamiseen - jos esiintyy niin on VIRHE.
Jos alkaa 0'llasta niin selviää siitä osoittimen arvoja muuttamalla.
Muistin varaisesti (= 20 vuoden takaa) tehty ja pikaisesti kokeiltu.
Yksi tapa:
Teet taulukon jossa on numerot 1-39.
Sekoitat taulukon.
Otat vaikka 7 ensimmäistä taulukon alkiota =)
/* DECLARE HEADERS
*/
#include
#include // for srand and rand
#include // for time
using namespace std;
#define MAXNRO 39 //
#define MAXSAR 7 //
int main()
{
int lottokuponki[MAXNRO];
int maxnro;
int i, j, nro, tmp;
srand(time(0)); // alustetaan 'sattuna'
for(j=0; j < 100; j )
{
maxnro = MAXNRO-1; // korjattu
for (i=0; i
Aurinko on varmaan sekoittanut pääni - lopullisesti, kun ryhdyin tähän hommaan. ;-)
Ohjelma käsittelee pseudo-random lukuja 1..10 ja valitsee niitä 5 kpl. Esimerkin omaisesti ohjelmassa on kaksi taulukkoa jotka kuvaavat kysymääsi ongelmaa. Taulukko2 on se mitä haet, muu sälä pelkkää rekvisiittaa. Tee tästä lottoarpoja muuttamalla ohjelman raja-arvoja.
//pseudo-random demo "random5.cpp"//
#include
#include
#include //randomin siemenlukua varten
#include
#include
#include
#include
void vaihda(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
//-------------
void lajittele(int maara, int luku[])
{
int k, l;
for (k=0;k
Kannattaa käyttää ns. harvaa taulukkoa. Ohjeet ja valmis lotto-esimerkki löytyy Simo Silanderin Ohjelmointi Pro Training -kirjasta, josta löytyy myös nettiversio osoitteesta: http://cs.stadia.fi/~silander/ohjelmointi/