Generowanie wyrazów ze zbioru znaków (wariacja z powtórzeniami)

Odpowiedz Nowy wątek
2011-07-19 20:26
elcoderro
0

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.

Pozostało 580 znaków

2011-07-20 10:17
0

A co budujesz słownik do łamania haseł ? :)


Pozostało 580 znaków

2011-07-20 10:45
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)


edytowany 2x, ostatnio: Gregory_Scot, 2011-07-20 10:54

Pozostało 580 znaków

2011-07-20 16:42
elcoderro
0

Dzięki piękne ;), teraz zajmę się tłumaczeniem na Javke, w razie problemów będę się odzywał. Jeszcze raz dzięki :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0