Losowanie bez powtórzeń - problem
Ostatnio zmodyfikowano 2013-01-28 12:38
Maniek Temat założony przez niniejszego użytkownika |
Losowanie bez powtórzeń - problem » 2013-01-28 09:38:17 Witam mógłby mi ktoś wytłumaczyć dlaczego, jak np. wpiszę kolejno 1,2,3 to nie raz losuje dobrze a nieraz albo dwie takie same, albo np. 1,23132 ?? Oto kod : #include <iostream> #include <cstdlib> #include <conio.h> #include <ctime>
bool czyBylaWylosowana( int iLiczba, int tab[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( tab[ i ] == iLiczba ) return true; i++; } while( i < ile ); return false; }
int wylosuj() { return( rand() % 3 ) + 1; }
int main() { srand( time( NULL ) ); int losowanie[ 3 ]; int wylosowanych = 0; int liczba[ 3 ]; int ads = 0; std::cout << "Podaj pierwsza liczbe : "; std::cin >> liczba[ 0 ]; std::cout << "Podaj druga liczbe : "; std::cin >> liczba[ 1 ]; std::cout << "Podaj trzecia liczbe : "; std::cin >> liczba[ 2 ]; do { int liczba2 = wylosuj(); if( czyBylaWylosowana( liczba2, losowanie, wylosowanych ) == false ) { losowanie[ wylosowanych ] = liczba[ ads ]; wylosowanych++; } ads++; } while( wylosowanych < 2 ); wylosowanych = 0; do { std::cout << losowanie[ wylosowanych ] << std::endl; wylosowanych++; } while( wylosowanych < 2 ); return 0; } |
|
DejaVu |
» 2013-01-28 12:25:24 Czy próbowałeś przeglądać istniejące rozwiązania tego zadania? Jest już co najmniej kilkadziesiąt rozwiązanych wątków na forum. /edit: losowanie[ wylosowanych ] = liczba[ ads ];
zamień na: losowanie[ wylosowanych ] = liczba2;
Dodam, że tablica: jest zbędna. |
|
usmiech |
random » 2013-01-28 12:38:50 Witam, nie mam zamiaru ingerowac w Twoj proces uczenia sie, ale moze program, ktory losowo podaje numery w grze w kosci /o ilosci kostek decyduje uzytkownik/ w czyms Ci pomoze... Mam nadzieje, ze nie wkurze admina ....;)
#include "stdafx.h" #include <iostream> #include <cstdlib> #include <cmath> #include <ctime> using namespace std; int rand_0toN1( int n );
int main() { int userInput, i; int r; srand( time( NULL ) ); cout << "Wprowadz ilosc kostek do losowania: "; cin >> userInput; for( i = 1; i <= userInput; i++ ) { r = rand_0toN1( 6 ) + 1; cout << r << " "; } cout << endl; system( "PAUSE" ); return 0; } int rand_0toN1( int i_numberToCheck ) { return rand() % i_numberToCheck; }
|
|
« 1 » |