Jestem uczniem liceum klasy 10, starającym się rozwiązać niektóre problemy w książce Algorytmy danych i algorytmów w języku Java.Permutacje ciągów w języku Java (nierekurencyjne)
Jednym z pytań jest wydrukowanie wszystkich permutacji ciągu.
class C14
{
public static void main(char a[])
{
// char[] a = {'c','a','r','b','o','n'};
int c=0,w=0;
for(int q = 0;q<a.length;q++)
{
for(int i=0;i<a.length;i++)
{
for(int j=1;j<a.length;j++)
{
for(int k=1;k<a.length-1;k++)
{
for(int z=0;z<a.length;z++)
{
System.out.print(a[z]);
c++;
}
w++;
System.out.println();
char p=a[k+1];
a[k+1]=a[k];
a[k]=p;
}
System.out.println();
}
System.out.println();
char x=a[0];
a[0]=a[1];
a[1]=x;
}
}
System.out.println(" Character count = " + c);
System.out.println(" Word count = " + w);
}
}
To jest moja próba. Książka prosi mnie o zrobienie tego dla postaci "c", "a", "r", "b", "o", "n". Moje rozwiązanie właśnie to robi, ale kiedy próbuję użyć słów 3 lub 4 literowych, daje mi powtórzenia. Jeśli usuniemy zewnętrzną pętlę i spróbuję ją wydrukować, działa ona dla słów o długości 3 i 4 liter, ale nie dla 5-literowych słów.
Chętnie wyjaśnię, o co mi chodzi, wiem, że to nie jest najskuteczniejsze, ale pamiętaj, że jestem tylko w klasie 10 i właśnie to przyszło mi na myśl.
Czy ktoś może mi pomóc, a przynajmniej podpowiedzieć, co jest nie tak? Proszę nie zalecać rozwiązania rekursywnego, ponieważ chcę najpierw go przetworzyć iteracyjnie. Dzięki, Sumit.
co z tego - http://stackoverflow.com/questions/11915026/permutations-of-a-tring-using-iteration? –
Dzięki za odpowiedź. Doceniam to. Ale problem polega na tym, że nie sądzę, żebym mógł używać funkcji StringBuilder i podłańcuchów itp. (Niedozwolone) –
chcesz zrobić permutację na tablicy "a" bez zmiany pętli za każdym razem, gdy zmieni się rozmiar "a"? – John