[C++]Losowanie bez powtórzeń
Ostatnio zmodyfikowano 2015-02-08 19:45
Gravity Temat założony przez niniejszego użytkownika |
[C++]Losowanie bez powtórzeń » 2015-02-08 18:02:46 Witam, dlaczego ten kod nie działa ? Pojawia się tylko konsolka i nic więcej .. #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
bool sprawdz( int tablica[], int ilosc ) { for( int i = 0; i < ilosc; i++ ) { for( int j = 0; j < i; j++ ) { if( tablica[ j ] == tablica[ i ] ) { return true; } } } return false; }
void wylosowane( int tablica[], int ilosc ) { for( int i = 0; i < ilosc; i++ ) { cout << "Wylosowana liczba to : " << tablica[ i ] << endl; } }
int main() { srand( time( NULL ) ); int tablica[ 10 ]; bool powtorka; for( int i = 0; i < 10; ) { tablica[ i ] =(( rand() % 6 ) + 10 ); powtorka = sprawdz( tablica, 10 ); if( powtorka == false ) { ++i; } } wylosowane( tablica, 10 ); return 0; }
|
|
NopeDotAvi |
» 2015-02-08 18:29:30 nie powinieneś wkładać nowo wylosowanej do tablicy, a potem sprawdzać, bo to nie ma sensu. najpierw wylosuj, potem sprawdź, a na końcu ewentualnie dodaj.
Poza tym nie powinieneś mieć 2 pętel w funkcji sprawzdającej, tylko 1 i w dodatku przekazać przez parametr liczbę wylosowaną (do tego potrzebujesz kolejnej zmiennej!) i sprawdzać czy któraś z tablicy równa się wylosowanej |
|
_CL_ |
» 2015-02-08 19:45:31 Wydaje mi się, że jeżeli chcesz rozwiązać problem losowania bez powtórzeń ( albo inaczej problem wyciągania karty z talii ) to można się pokusić o użycie listy. Wtedy po prostu gdy wylosujesz, usuwasz węzeł (node). |
|
« 1 » |