Masonerium Temat założony przez niniejszego użytkownika |
Sprawdzanie, czy dana liczba była już wylosowana » 2015-12-18 23:20:15 Cześć. Jestem początkujący, napisałem program, który ma losować 28 liczb bez powtórzeń. Napisałem takie coś z tym, że... nie działa. Jak to poprawić, żebym jakoś ogarnął? ;) (tak, ma być 28) #include <iostream> #include <ctime> #include <cstdlib> using namespace std; int main() { srand( time( NULL ) ); int tab[ 27 ]; int a; for( int i = 0; i <= 27; i++ ) { a = rand() % 28 + 1; for( int j = 0; j <= 27; j++ ) { while( a == tab[ j ] ) { a = rand() % 28 + 1; } } tab[ i ] = a; cout << a << " to jest " << i << endl; } return 0; } |
|
carlosmay |
» 2015-12-19 00:20:25 więc czemu int tab[ 27 ]; ??? Wylosowaną liczbę porównujesz do liczb w tablicy (nie trzeba sprawdzać całej za każdym razem, tylko tyle elementów ile aktualnie jest w użyciu) i jeśli znajdziesz duplikat, np. w połowie tablicy (należy wylosować nową wartość oraz rozpocząć przeszukanie od początku, a nie od miejsca gdzie program znalazł duplikat, ponieważ nowo wylosowana liczba może znajdować się we wcześniejszej części tablicy i nie zostanie wykryta jako duplikat. |
|
Masonerium Temat założony przez niniejszego użytkownika |
» 2015-12-19 11:35:36 Masz racje, dzięki. Tylko nie mogę sobie poradzić z tym, jak za każdym razem jak wykryje duplikat przeszukiwać tablicę od początku. |
|
carlosmay |
» 2015-12-19 12:41:57 Zeruj licznik pętli. A najlepiej napisać funkcję sprawdzająca duplikaty, zwracająca true lub false jako info czy jest duplikat czy nie. |
|
Masonerium Temat założony przez niniejszego użytkownika |
» 2015-12-19 16:26:45 Dzięki, wszystko działa!:) |
|
Gibas11 |
» 2015-12-20 11:43:07 Do zmiennych 'i', 'j' i 'a' pasuje raczej typ unsigned char (zakres 0 - 255), w mikrokontrolerach takie rzeczy mogą robić różnicę w wydajności, więc jestem wyczulony. :\ |
|
carlosmay |
» 2015-12-20 12:17:13 pasuje raczej typ unsigned char (zakres 0 - 255), |
@Masonerium nie używa zminennych typu char tylko int |
|
Gibas11 |
» 2015-12-20 15:17:16 Jakoś dałem radę zauważyć. :\ Ale lepiej niż int sprawdzi się unsigned char . Chyba, że będzie chciał losować większe liczby z większego zakresu, ale zakładam, że to jakiś program na zaliczenie itp. i nie jest przewidziana rozbudowa. |
|
« 1 » 2 |