私は 10 年生の高校生で、Java に関するデータ構造とアルゴリズムの本でいくつかの問題を解決しようとしています。
問題の 1 つは、文字列のすべての順列を出力することです。
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);
}
}
これが私の試みです。この本では、文字 'c'、'a'、'r'、'b'、'o'、'n' についてそれを行うように求められています。私のソリューションはまさにそれを行いますが、3 文字または 4 文字の単語を使用しようとすると、繰り返しになります。最も外側のループを削除して印刷しようとすると、3 文字と 4 文字の単語では機能しますが、5 文字以上の単語では機能しません。
喜んでその理由を説明します。これが最も効率的ではないことは承知していますが、私はまだ 10 年生で、これが最初に頭に浮かんだという事実を覚えておいてください。
誰かが私を助けてくれますか、少なくとも何が問題なのかをほのめかすことはできますか? 最初に繰り返し処理したいので、再帰的な解決策をアドバイスしないでください。ありがとう、サミット。