Rozdział 21. Losowanie liczb całkowitych bez powtórzeń - Praca Domowa
Ostatnio zmodyfikowano 2018-06-20 14:03
Key Temat założony przez niniejszego użytkownika |
Rozdział 21. Losowanie liczb całkowitych bez powtórzeń - Praca Domowa » 2018-06-20 13:47:42 Chciałbym zapytać, czy dobrze wykonałem drugie zadanie losujące 8 liczb bez powtórzeń. Wydaje mi się, że mój kod jest trochę za długi (?), ale program działa prawidłowo. #include <iostream> #include <ctime> #include <cstdlib> using namespace std;
void wczytaj( int liczba[] ) { int licz = 0; do { cout << "Podaj liczbe: "; cin >> liczba[ licz ]; licz++; } while( licz < 10 ); return; }
void losuj( int liczba[] ) { int los2, los3, los4, los5, los6, los7, los8; int los1 =( rand() % 10 ) + 0; cout << liczba[ los1 ] << endl; do { los2 =( rand() % 10 ) + 0; } while( los2 == los1 ); cout << liczba[ los2 ] << endl; do { los3 =( rand() % 10 ) + 0; } while( los3 == los2 || los3 == los1 ); cout << liczba[ los3 ] << endl; do { los4 =( rand() % 10 ) + 0; } while( los4 == los3 || los4 == los2 || los4 == los1 ); cout << liczba[ los4 ] << endl; do { los5 =( rand() % 10 ) + 0; } while( los5 == los4 || los5 == los3 || los5 == los2 || los5 == los1 ); cout << liczba[ los5 ] << endl; do { los6 =( rand() % 10 ) + 0; } while( los6 == los5 || los6 == los4 || los6 == los3 || los6 == los2 || los6 == los1 ); cout << liczba[ los6 ] << endl; do { los7 =( rand() % 10 ) + 0; } while( los7 == los6 || los7 == los5 || los7 == los4 || los7 == los3 || los7 == los2 || los7 == los1 ); cout << liczba[ los7 ] << endl; do { los8 =( rand() % 10 ) + 0; } while( los8 == los7 || los8 == los6 || los8 == los5 || los8 == los4 || los8 == los3 || los8 == los2 || los8 == los1 ); cout << liczba[ los8 ] << endl; return; }
int main() { srand( time( NULL ) ); int liczby[ 10 ]; wczytaj( liczby ); losuj( liczby ); return 0; }
Czy dałoby się jakoś skrócić ten kod? Np. inny warunek pętli. |
|
YooSy |
» 2018-06-20 14:03:03 Osobna pętla do każdej zmiennej? Serio? Znasz pętle, więc z nich korzystaj. Zamiast kopiować 8 razy ten sam kod, napisz to w pętli. BTW: gdyby tych liczb miałoby być 1000000? Tip: napisz funkcję, która sprawdzi czy aktualnie wylosowana liczba została już wylosowana. Przyda się dodatkowa tablica do zapamiętania wylosowanych wartości i zmienna pamiętająca aktualny rozmiar tablicy. Tip2: wygodnie użyć std::shufle na wypełnionej tablicy i wypisać 8 pierwszych wartości. |
|
« 1 » |