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

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.

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 :)

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