[C++] Losowanie dwóch dowolnych liczb z ustalonego zbioru
-
- Użytkownik
- Posty: 79
- Rejestracja: 7 paź 2014, o 18:01
- Płeć: Mężczyzna
- Lokalizacja: warszawa
- Podziękował: 16 razy
[C++] Losowanie dwóch dowolnych liczb z ustalonego zbioru
Mam pytanie jak mam napisać w języku C++ losowanie dwóch dowolnych liczb z ustalonego zbioru załóżmy \(\displaystyle{ \left\langle 1;6\right\rangle}\) za pomocą funkcji rand ale tak żeby te dwie liczby nie były równe?
Ostatnio zmieniony 22 lis 2014, o 15:59 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Powód: Poprawa wiadomości.
- Kacperdev
- Użytkownik
- Posty: 3260
- Rejestracja: 23 mar 2010, o 19:19
- Płeć: Mężczyzna
- Lokalizacja: Bydgoszcz
- Podziękował: 17 razy
- Pomógł: 686 razy
[C++] Losowanie dwóch dowolnych liczb z ustalonego zbioru
Kod: Zaznacz cały
1+ rand()% 6
Kod: Zaznacz cały
a+ rand()% (b-a+1)
- Dasio11
- Moderator
- Posty: 10225
- Rejestracja: 21 kwie 2009, o 19:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 40 razy
- Pomógł: 2362 razy
[C++] Losowanie dwóch dowolnych liczb z ustalonego zbioru
W pechowym przypadku tych losowań może wyjść sporo, więc pokażę sposób o czasie oczekiwania, który można ograniczyć z góry.
Kod: Zaznacz cały
int t[6] = { 1, 2, 3, 4, 5, 6 };
int i = rand()%6;
int A = t[i];
t[i] = 6;
int B = t[rand()%5];
-
- Użytkownik
- Posty: 576
- Rejestracja: 2 lut 2012, o 21:42
- Płeć: Mężczyzna
- Lokalizacja: Radom
- Podziękował: 1 raz
- Pomógł: 64 razy
[C++] Losowanie dwóch dowolnych liczb z ustalonego zbioru
Kod powyżej jest niepoprawny. Możliwość wylosowania dwóch 6 (sprawdziłem empirycznie, choć już na pierwszy rzut oka widać ten błąd).
Przywrócono treść posta. Niedozwolone jest modyfikowanie treści wypowiedzi, jeśli do tej treści istnieją odniesienia w dalszych postach. Dasio11
Przywrócono treść posta. Niedozwolone jest modyfikowanie treści wypowiedzi, jeśli do tej treści istnieją odniesienia w dalszych postach. Dasio11
Ostatnio zmieniony 22 lis 2014, o 21:55 przez athame, łącznie zmieniany 1 raz.
- Dasio11
- Moderator
- Posty: 10225
- Rejestracja: 21 kwie 2009, o 19:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 40 razy
- Pomógł: 2362 razy
[C++] Losowanie dwóch dowolnych liczb z ustalonego zbioru
A mógłbyś pokazać, w jakim przypadku losują się dwie szóstki? Bo ja na drugi, ani nawet na trzeci rzut oka, tego nie widzę.
-
- Użytkownik
- Posty: 576
- Rejestracja: 2 lut 2012, o 21:42
- Płeć: Mężczyzna
- Lokalizacja: Radom
- Podziękował: 1 raz
- Pomógł: 64 razy
[C++] Losowanie dwóch dowolnych liczb z ustalonego zbioru
Napisz program. Zapętlij wszystko tak, żeby wykonało się ze 100 razy i wyświetlaj warunkowo liczby, tylko wtedy , kiedy A=B. U mnie wyświetliło ze 20 razy taki zestaw i zawsze to były dwie "szóstki". Kod jest krótki i prosty, więc z pewnością odkryjesz dlaczego.Dasio11 pisze:A mógłbyś pokazać, w jakim przypadku losują się dwie szóstki? Bo ja na drugi, ani nawet na trzeci rzut oka, tego nie widzę.
Przywrócono treść posta. Niedozwolone jest modyfikowanie treści wypowiedzi, jeśli do tej treści istnieją odniesienia w dalszych postach.
Ostatnio zmieniony 22 lis 2014, o 21:55 przez athame, łącznie zmieniany 1 raz.
- Dasio11
- Moderator
- Posty: 10225
- Rejestracja: 21 kwie 2009, o 19:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 40 razy
- Pomógł: 2362 razy
[C++] Losowanie dwóch dowolnych liczb z ustalonego zbioru
Zapętliłem tak, żeby wykonało się 1000000 razy:
i nie wypisało mi nic.
[Edit] Wątpliwość może brać się stąd, że jedna z liczb, która wygląda jak
Jak wylosuję dwa razy indeks 0, to:
Kod: Zaznacz cały
#include <iostream>
#include <cstdlib>
#include <ctime>
int main()
{
srand( time( NULL ) );
for( int n = 0; n < 1000000; ++n )
{
int t[6] = { 1, 2, 3, 4, 5, 6 };
int i = rand()%6;
int A = t[i];
t[i] = 6;
int B = t[rand()%5];
if( A == B )
{
std::cout << "i = " << i << "
";
std::cout << "A = " << A << "
";
std::cout << "B = " << B << "
";
std::cout << "
";
}
}
return 0;
}
[Edit] Wątpliwość może brać się stąd, że jedna z liczb, która wygląda jak
6
, tak naprawdę chytrze jest liczbą 5
. [/Edit]Jak wylosuję dwa razy indeks 0, to:
Kod: Zaznacz cały
i = 0;
A = t[0] = 1;
t[0] = 6;
B = t[0] = 6;
-
- Moderator
- Posty: 2828
- Rejestracja: 15 cze 2008, o 15:45
- Płeć: Mężczyzna
- Lokalizacja: Seattle, WA
- Podziękował: 3 razy
- Pomógł: 356 razy
[C++] Losowanie dwóch dowolnych liczb z ustalonego zbioru
A racja, wycofuję się z tych głupotDasio11 pisze:Jak wylosuję dwa razy indeks 0, to:
Kod: Zaznacz cały
i = 0; A = t[0] = 1; t[0] = 6; B = t[0] = 6;
-
- Użytkownik
- Posty: 5974
- Rejestracja: 28 lut 2010, o 19:45
- Płeć: Mężczyzna
- Lokalizacja: Toruń
- Podziękował: 15 razy
- Pomógł: 1251 razy
[C++] Losowanie dwóch dowolnych liczb z ustalonego zbioru
Kod Dasia jest bardzo fajny i sprytny; co najfajniejsze nie zmienia wcale losowości (jeżeli można w komputerze w ogóle o losowości mówić)!
- Dasio11
- Moderator
- Posty: 10225
- Rejestracja: 21 kwie 2009, o 19:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 40 razy
- Pomógł: 2362 razy
[C++] Losowanie dwóch dowolnych liczb z ustalonego zbioru
Mhm. A przedłużenie tej procedury prowadzi do uzyskania kodu, który losuje permutację zbioru
{ 1, 2, ..., n }
.