Witam, napisałem prosty, działający symulator trafienia 6 w lotto. Niby sporo tego w sieci, ale chciałem zrobić coś od siebie, dołożyć małą cegiełkę. Program jest w pełni funkcjonalny, jednakże odkryłem pewną dziwną sprawę.
Zamieszczam kod:
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <iomanip>
using namespace std;
int main()
{
srand(time(NULL));
long double proba=0;
int ile_wybrac = 6;
int ile_wylosowac = 6;
int ile_juz_wylosowano=0;
int *l = new int[ile_wybrac];
int *lk = new int[ile_wylosowac];
bool losowanie_ok;
cout<<"Witaj w symulatorze zdobycia 6 w lotto!"<<endl<<endl;
for (int i=0; i<ile_wybrac; i++)
{
cout<<"Podaj "<<i+1<<". liczbe w zakresie 1-49: ";
l[i]=0;
cin>>l[i];
}
do
{
ile_juz_wylosowano=0;
for (int i=0; i<ile_wylosowac; i++)
{
do
{
int liczba=rand()%49+1;
losowanie_ok=true;
for (int i=0; i<=ile_juz_wylosowano; i++)
{
if (liczba==lk[i]) losowanie_ok=false;
}
if (losowanie_ok==true)
{
lk[ile_juz_wylosowano]=liczba;
ile_juz_wylosowano++;
}
} while (losowanie_ok!=true);
}
proba++;
} while ((l[0]!=lk[0])||(l[1]!=lk[1])||(l[2]!=lk[2])||(l[3]!=lk[3])||(l[4]!=lk[4])); //||(l[5]!=lk[5]));
cout<<setprecision(100000)<<"Udalo ci sie trafic 6 przy "<<proba<<" losowaniu"<<endl<<endl;
cout<<"Liczby wybrane przez ciebie : "<<l[0]<<" "; cout<<l[1]<<" "; cout<<l[2]<<" "; cout<<l[3]<<" "; cout<<l[4]<<" "; cout<<l[5]<<" "<<endl;
cout<<"Liczby wybrane przez komputer: "<<lk[0]<<" "; cout<<lk[1]<<" "; cout<<lk[2]<<" "; cout<<lk[3]<<" "; cout<<lk[4]<<" "; cout<<lk[5]<<" "<<endl;
return 0;
}
Końcowy warunek do...while(); sprawdza tylko 5, a nie 6 cyfr, z oczywistego powodu. Nie chce mi się czekać kilku godzin aby otrzymać liczbę prób za którym razem trafiło się 6.
Sprawa całego tematu na forum jest następująca: Zawsze, ilekroć razy uruchomię od nowa program i jako liczby do porównania wprowadzę wartości 1 2 3 4 5 6 (po endl nie spacji) i zaczekam na pokazanie ilości prób, to ZAWSZE inna jest liczba prób (zazwyczaj zaczyna się od kilku milionów, a kończy na miliardach), a ostatnia cyfra , czyli cyfra 6 losowania przez komputer wynosi 41. Wylosowane liczby przez komputer pasujące do moich zawsze wyświetlone są na końcu programu. Dlaczego 41 i dlaczego po innych ilościach prób? Czy liczby pseudolosowe to jakiś nietypowo powtarzający się ciąg liczbowy? Poniżej zamieszczam kilka dowodów robionych przy pomocy zwykłego screenshootera. Możecie skompilować kod u siebie i sprawdzić czy u was również będzie to 41. Pozdrawiam!
1. https://gyazo.com/6ee4904f61a4a25ce281a2a02f5b7b02
2. https://gyazo.com/3609720c37e42e45240657b2f2084330
3. https://gyazo.com/89b0f8b8dc0a17dd620dc32b509655da
Wiem, ostatnio dużo pytań zadaję na tym forum, ale od tego ono jest prawda? :)