1

このような32ビットのバイナリシーケンスを生成する必要があります。8つの「1」があり、残りのビットは「0」です。したがって、16進数で記述されているため、シーケンスの一部は次のようになります。

000000FF
000001FE
000001FD
000001FB
000001F7
...

問題は32から8を選択することなので、10518300の組み合わせがあります。言い換えれば、私の例のような10518300シーケンスがあります。希望のシーケンスを生成するための提案やアルゴリズムを教えていただければ幸いです。

4

2 に答える 2

6

この問題は、0と1の順列を作成することに関するものです。コーディングソリューションとして最も簡単なのは、とを使用することnext_permutationですvector<bool>

辞書式順序で最も早い順列を持つベクトルを準備します(1つは後ろにあります)。next_permutationが返されるまで実行しますfalse。これは、3ビットが設定されたすべての8ビットシーケンスを生成するデモコードです。

vector<bool> data(8, false);
data[7] = data[6] = data[5] = true;
do {
    for (int i = 0 ; i != data.size() ; i++) {
        cout << (int)data[i];
    }
    cout << endl;
} while (next_permutation(data.begin(), data.end()));

デモを実行しているideoneへのリンクは次のとおりです。

プログラムには、最後の8つの要素がに設定された32ビットのベクトルが必要1です。シーケンスの要素を出力する代わりに、それらを32ビットに変換しint、出力コンテナーに格納する必要があります。

于 2013-01-30T04:01:21.573 に答える
0

設計:

  1. 1つが最初に来て、1つが最後に来て、それぞれがその順序で場所を持つように、組み合わせの順序を定義します。

  2. 作成した順序に従ってシーケンスを次のシーケンスに変換するアルゴリズムを記述します。

  3. そのアルゴリズムをコードで実装します。

実装:

  1. 順序に従って、シーケンスを最初のシーケンスに設定します。

  2. 現在のシーケンスを出力します。

  3. これが最後のシーケンス停止である場合。

  4. 実装したアルゴリズムを使用して、次のシーケンスに進みます。

  5. 手順2に進みます。

于 2013-01-30T03:50:03.033 に答える