2012-08-30 9 views
6

私はJavaのデータ構造とアルゴリズムの書籍のいくつかの問題を解決しようとしている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年生であり、これが私の頭に最初に来たという事実を念頭に置いてください。

誰かが私を助けてくれるのですか、あるいは何が間違っているかを少なくとも示唆できますか? 私は反復的に最初に作業したいので、再帰的な解決法に助言しないでください。ありがとうございます。 Sumit。 あなたが持っている繰り返し

n個のものと

+0

この点について - http://stackoverflow.com/questions/11915026/permutations-of-a-string-using-iteration? –

+0

お返事ありがとうございます。感謝します。 しかし、問題は、私はStringBuilderと部分文字列関数などを使用できるとは思わない。 (使用不可) –

+1

'a'のサイズが変更されるたびにループを変更することなく、配列 'a'上で順列をしたいですか? – John

答えて

3

順列を使用すると、毎回n個の選択肢を持っている...から選択します!

それらのRを選択する場合、順列は次のとおりです。

N×N×...(r回)= N^R

私は2例を提示しています。最初のケースは、nとrのサイズがすでにわかっている場合と、簡単な場合です。 nとrが動的であるときの第2です。

//when n and r are known statically 

class Permutation 
{ 
    public static void main(String[] args) 
    { 
     char[] values = {'a', 'b', 'c', 'd'}; 
     int n = values.length; 
     int r = 2; 

     int i = 0, j = 0; 
     for(i=0; i<n; i++) 
     { 
      for(j=0; j<n; j++) 
      { 
       System.out.println(values[j] + " " + values[i]); 
      } 
     } 
    } 
} 


//when n and r are known only dynamically 

class Permutation 
{ 
    public static void main(String[] args) 
    { 
     char[] values = {'a', 'b', 'c', 'd'}; 
     int n = values.length; 
     int r = 2; 
     int i[] = new int[r]; 
     int rc = 0; 
     for(int j=0; j<Math.pow(n,r); j++) 
     { 

      rc=0; 
      while(rc<r) 
      { 
       System.out.print(values[i[rc]] + " "); 
       rc++; 
      } 
      System.out.println(); 
      rc = 0; 
      while(rc<r) 
      { 
       if(i[rc]<n-1) 
       { 
        i[rc]++; 
        break; 
       } 
       else 
       { 
        i[rc]=0; 
       } 
       rc++; 
      } 
     } 
    } 
} 
関連する問題