Witam, mam problem w zakodowaniu algorytmu tworzenia listy wyrazów (wyrazy mogą mieć długość od 1 do 4 znaków), tworzonych jako wariacje z powtórzeniami ze zbioru małych liter a-z (czyli a, aaa, zzz, aba, aabb etc.). Nie mogę rozpracować tego biorąc pod uwagę możliwą zmienność długości wyrazów (podawaną przez użytkownika). Próbowałem zaprzęgnąć do tego rekurencję, ale zapętliłem się w rozumowaniu. Z góry dziękuję za pomoc.
0
0
A co budujesz słownik do łamania haseł ? :)
0
Tu masz kod dla liczby elementów równej 4
#include <iostream>
using namespace std;
const int k = 4 ; // dlugosc wariacji
int n = 26 ; // ilosc elementow w zbiorze
int w[k + 1] ; // w - reprezentacja pojedynczej wariacji
int skok[k + 1] ;
int index(int m)
{
int i = 0 ;
while (m % n == 0)
{
i++ ;
m = (m - (m % n)) / n ;
}
return i ;
}
int main(int argc, char *argv[])
{
int i ;
for (i = 0; i <= k; i++) skok[i] = 1 ;
int m = 0 ;
int cnt = 0 ;
do
{
cnt++ ;
cout << cnt << ". " ;
for (i = 1; i <= k; i++) printf("%c", w[i] + 97);
cout << endl ;
m++ ;
i = index(m) + 1 ;
if (i <= k)
{
w[i] = w[i] + skok[i] ;
if (w[i] == 0) skok[i] = 1 ;
if (w[i] == n - 1) skok[i] = -1 ;
}
}while (i <= k) ;
system("PAUSE");
return EXIT_SUCCESS;
}
Jak chcesz mieć dla ilości elementów 1,2 i 3 to już sam sobie zmodyfikuj ten kod albo po prostu powtórz cały algorytm dla k = 1,2 i 3
Chyba oczekiwałeś kodu w javie? :) a ja podałem Ci w C++... Ale przełożenie z C++ nie powinno stanowić problemu (prawie 1 do 1)
0
Dzięki piękne ;), teraz zajmę się tłumaczeniem na Javke, w razie problemów będę się odzywał. Jeszcze raz dzięki :)