matka5432 Temat założony przez niniejszego użytkownika |
Wszystkie kombinacje danej ilości liter w "słowie" » 2012-08-07 20:06:32 Witam, Czy jest prosty sposob, na sprawdzenie wszystkich kombinacji jakiejs dlugosci slowa? Tzn. podmienienie pod kazda literke danego slowa inna literke. Mam na mysli slowa maksymalnie 4-literowe, bo inaczej programowi zajelo by to z 10 min, poniewaz kazda kombinacje bedzie w pewien sposob sprawdzal ;) Lepiej wytlumaczyc tego nie umiem, jesli ktos nadal nie rozumie, to podaje przyklad :D
slowo 3-literowe...wszystkie kombinacje:
aaa aab ... zzy zzz
Jesli bedzie slowo, w ktorym powtarzaja sie literki, np. "tata" to program powinien to traktowac jako 2-literowe slowo, poniewaz do zamiany ma tylko 2 literki.
|
|
DejaVu |
» 2012-08-07 20:07:54 |
|
matka5432 Temat założony przez niniejszego użytkownika |
» 2012-08-07 20:20:15 Myslalem juz nad takim rozwiazaniem, ale to bedzie dzialac tylko wtedy, gdy slowo bedzie takiej dlugosci, dla jakiej przeznaczony jest kod, bo petli powinno byc tyle, ile nie powtarzajacych sie liter w slowie (chyba ze sie myle). Chcialem, aby moglo byc sprawdzone slowo o kazdej ilosci liter od 1 do 4. Jedyny pomysl jaki mi przychodzi do glowy, to napisanie 4 takich kodow w IF'ach, ktore sprawdzaja dlugosc ;D, ale to niestety byloby dosyc dlugie ;> |
|
DejaVu |
» 2012-08-07 20:31:20 To poczytaj np. o rekurencji. |
|
matka5432 Temat założony przez niniejszego użytkownika |
» 2012-08-07 23:26:12 Poczytalem troche o rekurencji, przejrzalem przyklady, Ale nie bardzo wiem jak ja moge w tym celu wykorzystac. Moze ma ktos inny pomysl? |
|
graszka |
» 2012-08-09 15:52:19 Nie wiem, czy dobrze cię zrozumiałam, ale najłatwiej będzie to zrobić właśnie przez rekurencję w ten sposób, że najpierw tworzysz "słowo": string slowo; for( int i = 0; i < dlugosc; ++i ) { slowo += 'a'; } a potem wywołujesz taką funkcję: void kombinuj( string slowo, int pos ) { if( pos == slowo.size() - 1 ) { while( slowo[ pos ] < 123 ) { cout << slowo << "\n"; ++slowo[ pos ]; } slowo[ pos ] = 'a'; } else { while( slowo[ pos ] < 123 ) { kombinuj( slowo, pos + 1 ); ++slowo[ pos ]; } slowo[ pos ] = 'a'; } } oczywiście jako pos w parametrze podajesz 0, czyli początkową pozycję. W ten sposób program wypisze wszystkie kombinacje słowa o danej długości. A z tym powtarzaniem liter to przed wyświetleniem sprawdź, czy literki się nie powtarzają i te powtarzające się skasuj. |
|
tirou |
» 2012-08-09 19:31:08 tylko kolega z góry napisał taki przykład:
aaa
aab
...
zzy
zzz
Z tym zagnieżdzaniem pętli o ktorym wspomniał DejaVu jest proste ale z liczbami bo zwiększa się i=0 ; i++ i leci. A co jeśli chce się tak z literami sprawdzić, żeby wypisało wszystkie możliwe? bo zwiększanie indeksu dla litera chyba nie jest możliwe?? |
|
DejaVu |
» 2012-08-09 19:35:19 Jest możliwe, ponieważ znak to nic innego jak kod ASCII, a kod ASCII to nic innego jak liczba. |
|
« 1 » 2 3 |