kitsss Temat założony przez niniejszego użytkownika |
Implementacja problemu z działu kombinatoryki » 2014-07-15 13:39:11 Nie potrafię sobie z tym poradzić. Mając n elementowy ciąg elementów (n należy do naturalnych) każdy z tych elementów może przyjąć losowo postać literki: a,b lub c. Powiedzmy użytkownik chcę 5 elementowy ciąg i program utworzył: a a c b a Następnie trzeba wprowadzić w osobne tablice wszystkie możliwe ciągi tych literek, które powstaną poprzez skreślenie DOWOLNEJ ilości elementów(literek) Przykład: Program: Podaj n Użytkownik: 4 Program: wylosowałem a b c b Program: Wszystkie możliwe ciągi poprzez skreślenie dowolnej ilości elementów: zbiór pusty (Bo skreśliłem wszystkie) // Pomyślałem, że te ciągi będę przedstawiał w osobnych tablicach o wymiarach[n], lub w jednej dwuwymiarowej[symbolNewtona][n] //o tym niżej a000 0b00 00c0 000b ab00 a0c0 a00b 0bc0 00cb a00b abc0 0bcb a0cb ab0b abcb Przed podaniem tych odpowiedzi znam ilość tych odpowiedzi, więc ilość tablic które muszę użyć: symbol Newtona (kombinacja ile można utworzyć podzbiorów t-elementowych z n-elementowego zbioru): char T[ 4 ] = { a, b, c, b }; int How_Many = 0; for( int i = 1; i <= n; i++ ) { How_Many = How_Many +( silnia( n ) /( silnia( i ) * silnia( n - i ) ) ); if( i == 1 ) How_Many++; } cout << "Mozliwe " << How_Many << " kombinacji." << endl; char t2[ How_Many ][ n ];
|
|
jankowalski25 |
» 2014-07-15 20:25:51 Każda litera może się pojawić lub nie. Z tego wynika, że masz 2^n kombinacji. Wstawiasz zero jeśli litery nie ma lub jeden jeśli jest. Na przykład (n=4): 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Możesz utworzyć tablicę zmiennych typu bool (lepiej użyj na przykład zmiennej typu std::vector < bool > ). Pobierasz wartość typu bool na podstawie indeksu i wypisujesz wynik. |
|
kitsss Temat założony przez niniejszego użytkownika |
» 2014-07-15 21:02:15 Vector za bardzo nie chcę, a nawet i nie mogę użyć do mojego projektu. Czyli mam zrobić tak, że znając ilość wszystkich rozwiązań k, muszę skopiować tą tablicę wejściową którą komputer wylosował (ciąg literek) razy k, i wtedy przyrównać każdą z tych tablic skopiowanych z tym co rozpisałeś, czyli jeśli w indeksie tablicy ,,rozpisanej przez Ciebie" jest zero, to usuwam w tym indeksie literkę z kolejnej kopii oryginału. I tak przyrównać ze sobą wszystkie pary tablic. Dobrze rozumuje? Tylko w dalszym ciągu nie wiem jak zaimplementować dla dowolnej ilości elementów wszystkie rozwiązania w postaci bool (twój przykład). |
|
jankowalski25 |
» 2014-07-15 21:40:39 muszę skopiować tą tablicę wejściową którą komputer wylosował (ciąg literek) razy k |
Nie musisz. Wystarczy mieć dwie tablice: w jednej dane, a w drugiej informacje, co wyświetlić. Tylko w dalszym ciągu nie wiem jak zaimplementować dla dowolnej ilości elementów wszystkie rozwiązania w postaci bool (twój przykład). |
To, co ja napisałem, to po prostu kolejne liczby całkowite od 0 do 15 zapisane binarnie. Wystarczy mieć tablicę zmiennych o określonej liczbie bitów, wyzerować ją, a następnie przesuwać o 1 wartości poszczególnych elementów. Dzięki operacjom bitowym dowiesz się, czy dany bit jest ustawiony, czy nie. |
|
kitsss Temat założony przez niniejszego użytkownika |
» 2014-07-15 22:23:14 ,,To, co ja napisałem, to po prostu kolejne liczby całkowite od 0 do 15 zapisane binarnie. Wystarczy mieć tablicę zmiennych o określonej liczbie bitów, wyzerować ją, a następnie przesuwać o 1 wartości poszczególnych elementów. Dzięki operacjom bitowym dowiesz się, czy dany bit jest ustawiony, czy nie.''
Jesteś TheBest :D Już wiem jak to zrobić :) Dzięki wielkie za pomoc ! |
|
« 1 » |