0

子音と母音を交互に使用して、可能なすべての文字の組み合わせを出力する関数を作成しようとしています。次のように出力されます。

子音+母音+子音+母音+子音+母音 --or-- bababa...

最初の 2 文字は正しく出力されていますが、さらに追加することに行き詰まっています。私の問題は、以下の for ループをどこに置くかです。

現在、コンソールでこれを計算しています (テスト用) が、機能したら、後で参照できるようにファイルに出力します。

void createWord(char consonants[], char vowels[])
{
//CLENGTH = 21, and VLENGTH = 5, with consonants[] as a cstring with all
consonants, and vowels[] as a cstring with all vowels.

int i, j;
for (i = 0; i < CLENGTH; i++)
{

    for (j = 0; j<VLENGTH; j++)
    {
        cout << consonants[i] << vowels[j] ;
        cout << endl;
    }
}

}
4

1 に答える 1

1

「すべての組み合わせを生成する」タイプの問題のほとんど驚くべき数のように、これは数えることで解決できます。

数値表現から文字表現に変換するために、いくつかの文字列から始めます。

char const *consonants[] = "bcdfghjklmnpqrstvwxyz";
char const *vowels[] = "aeiou";

数えるだけで、数の正しい部分を配列のインデックスとして使用できます。

// I'll arbitrarily pick 10000 as the number to print out.
for (size_t i=0; i<10000; i++) {
    size_t digit_0 = i % 21;
    i /= 21;
    size_t digit_1 = i % 5;
    i /= 5;
    size_t digit_2 = i % 21;
    i /= 21;
    size_t digit_3 = i % 5;

    std::cout << consonants[digit_0] 
              << vowels[digit_1] 
              << consonants[digit_2] 
              << vowels[digit_3] 
              << "\n";
}
于 2013-07-11T02:15:52.653 に答える