0

理解するのに助けが必要な問題があります。私がやっていることにアプローチするためのより良い方法について、いくつかの指針が得られることを望んでいました。私の主な問題は、以下の数行 (//これが原因です) であり、ページの下部に説明があります。

電話番号のすべての可能な結果を​​並べ替える必要があります:(辞書の単語だけではありません)

IE 222-2222

a、b、cのすべての可能な順列を含む3^7の長さのリストを出力する必要があります

IE

AAAAAAA
AAAAAAB
AAAAAAC
AAAAABA   // THIS IS WHATS HANGING ME UP
AAAAABB
AAAAABC
AAAAACA   // HERE TOO AND SO ON

MY CODE (テストのために意図的に短縮されています)

AAAA
AAAB
AAAC
AABC
AACC
ABCC
ACCC
BCCC
CCCC

私はプログラミングの初心者なので、for、while、if ステートメントを使用して、配列から個々の文字を取得することについての知識があります。

これまでの私のコードは次のようになります: (これは関数の一部です。コードがありません)

char alphaFunc(char n[]){

int d1=n[0]-48;
int d2=n[1]-48;
int d3=n[2]-48;
int d4=n[3]-48;
int d5=n[4]-48;
int d6=n[5]-48;
int d7=n[6]-48;
int a=0,b=0,c=0,d=0,e=0,f=0,g=0;

int i=0;

char charArray[10][4]={ {'0','0','0'},{'1','1','1'},{'A','B','C'},
        {'D','E','F'},{'G','H','I'},{'J','K','L'},{'M','N','O'},
        {'P','R','S'},{'T','U','V'},{'W','X','Y'}  };



while(i <=14){

    printf("%c%c%c%c\n", charArray[d1][a],
            charArray[d2][b],charArray[d3][c],charArray[d4][d],
            charArray[d5][e],charArray[d6][f],charArray[d7][g]);
    g++;

    if(g==3){
        g=2;
        f++;
    }
    if(f==3){
        f=2;
        e++;
    }
    if(e==3){
        e=2;
        d++;
    }

私は私のためにこれを行う人を正確に探しているわけではありません.CharArray [d-] [a]の場所[3]に数字がある場合に、どの種類のステートメントがb / cで機能するかを理解するのに少し助けが必要です. [0] にリセットすると、ループの別の部分に移動します。(それが理にかなっていることを願っています)。

4

1 に答える 1

1

の値charArrayは一定であるため、関数で宣言するのではなく、グローバル変数にすることをお勧めします。また、4 文字の数字と 3 文字の数字があるため、ジャグ配列を使用して表現することを検討することをお勧めします。

電話番号から取得できる順列を印刷する限り、再帰はあなたの友達になると思います。電話番号を int 配列に格納できると仮定すると、次のように動作するはずです。

public void printPermutations(int[] phoneNumber)
{
   printPermutations(phoneNumber, 0, String.Empty);
}

private void printPermutations(int[] phoneNumber, int index, string permutation)
{
   if(index >= phoneNumber.Length)
   {
       // If we've reached the end, print the number
       printf(permutation + "\n");
   }
   else
   {
       // Otherwise, generate a permutation for each
       // character this digit can be
       int digit = phoneNumber[index];
       char[] chars = charArray[digit];
       for (int i = 0; i < chars.Length; i++)
       {
           printPermutations(phoneNumber, index+1, permutation + chars[i]);
       }
   }
}
于 2013-04-20T03:24:07.697 に答える