21. Losowanie bez powtórzeń
Ostatnio zmodyfikowano 2013-10-01 23:22
Lanc Temat założony przez niniejszego użytkownika |
21. Losowanie bez powtórzeń » 2013-10-01 22:45:39 Po przeczytaniu tego rozdziału,miałem pewne wątpliwości co do moich umiejętności na tym etapie,więc pomyślałem,że napisze ten program od zera,niestety wywala czasami zły wynik,a nie widze błędu.Polecenie brzmi "Program ma nam wylosować 5 liczb bez powtórzeń. Liczby wylosowane mają być z przedziału od 1 do 10. " Z góry dziękuję. : 3 #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
bool dobrz( int ilosc, int wylosowane[], int a ) { int i = 0; do { if( wylosowane[ i ] == a ) return false; i++; } while( i < ilosc ); return true; }
int losuj() { return( rand() ) % 10 + 1; } int main() { srand( time( NULL ) ); int wylosowane[ 5 ]; int ile = 0; for( int i = 0; i < 5; i++ ) { int b = losuj(); cout << "losuje " << i << " " << b << endl; if( dobrz( ile, wylosowane, b ) ) wylosowane[ i ] = b; ile++; } int g = 0; do { cout << wylosowane[ g ] << endl; g++; } while( g < 5 ); }
[ \c pp ] |
|
killjoy |
» 2013-10-01 23:16:50 Gdy ci się powtórzy wylosowana liczba, omijasz przypisywanie jakiejkolwiek wartości do tablicy, a że tablica nie jest wyzerowana to otrzymujesz cuda. Musisz dodać warunek do tego if'a (tzn. odpowiednie else) if( dobrz( ile, wylosowane, b ) ) wylosowane[ i ] = b;
Żeby w razie powtórzenia losował jeszcze raz, a nie przechodził do kolejnej liczby w pętli. |
|
Lanc Temat założony przez niniejszego użytkownika |
» 2013-10-01 23:22:45 Dziękuję za szybką odpowiedź. : 3 |
|
« 1 » |