[C++]Losowanie liczb bez powtórzeń
Ostatnio zmodyfikowano 2014-05-22 20:27
dolby1092 Temat założony przez niniejszego użytkownika |
[C++]Losowanie liczb bez powtórzeń » 2014-05-22 17:40:45 Mam problem z zadaniem z powyższego tematu. Program losuje liczby podane przez użytkownika lecz się powtarzają. Próbuje już od paru godzin i nie wiem co jest źle.Udało mi się zrobić coś takiego. #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int dodaj( int t[] ) { int i = 0; cout << "Podaj 3 liczby: "; do { cin >> t[ i ]; i++; } while( i < 10 ); } int losuj() { return( rand() % 10 ) + 0; } int czyWylosowano( int t[], int ile, int liczba ) { if( ile <= 0 ) return false; int i = 0; do { if( t[ i ] == liczba ) return true; i++; } while( i < ile ); return false; }
int main() { srand( time( 0 ) ); int uzytkownika[ 10 ]; int wylosowane[ 8 ]; int liczba; int ile = 0; dodaj( uzytkownika ); do { int liczba = losuj(); if( czyWylosowano( wylosowane, ile, liczba ) == false ); wylosowane[ ile ] == uzytkownika[ liczba ]; ile++; } while( ile < 8 ); ile = 0; do { cout << wylosowane[ ile ] << ", "; ile++; } while( ile < 8 ); return 0; }
|
|
maly |
» 2014-05-22 17:57:15 if( czyWylosowano( wylosowane, ile, liczba ) == false ); średnikom za if-em mówimy stanowcze NIE:) |
|
dolby1092 Temat założony przez niniejszego użytkownika |
» 2014-05-22 18:36:01 średnik usuniety i teraz losuje same 0 i jakas duza liczbe
|
|
Moorfox |
» 2014-05-22 19:35:19 Nie chce mi sie czytac kodu calego, ale sadzac po nazwach funkcji moze: if( czyWylosowano( wylosowane, ile, liczba ) ) continue;
Po za tym nadal sadzac po nazwach funkcji moge wywnioskowac (zakladajac n-ile liczb podlega losowaniu, k-ile liczb chcesz wylosowac) i warunek n>k to: jezeli n duzo wieksze od 0 powiedzmy 5000 i zwlaszcza jezeli n i k sa prawie rowne to zlozonosc obliczeniowa takiego algorytmu jest ogromna i zdefiniowanie zlozonosci czasowej jest teoretycznie nie mozliwe Po za tym wylosowane[ ile ] == uzytkownika[ liczba ];
Chyba nie musze nic wiecej mowic ? |
|
Rajdowiec |
» 2014-05-22 20:21:32 int dodaj nic nie zwraca |
|
Negatyw |
odp » 2014-05-22 20:27:18 Może wyczyść strumień przy wczytywaniu liczby za pomocą cin.clear() |
|
« 1 » |