簡體   English   中英

生成特定的32位二進制序列

[英]generating specific 32-bit binary sequence

我需要生成這樣的32位二進制序列:它具有八個'1',其余位為'0'。 如此寫成十六進制,一些序列將如下所示:

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

問題是要從32個中選擇8個,因此有10518300個組合。 換句話說,有10518300個序列,例如我的示例。 如果您給我任何建議或算法來生成所需序列,我將不勝感激。

這個問題是關於零和一的排列。 最簡單的編碼解決方案是使用next_permutationvector<bool>

准備一個按字典順序排列最早的向量(后面是一個)。 運行next_permutation直到返回false 這是一個演示代碼,該代碼生成設置了三位的所有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鏈接

您的程序將需要一個32位向量,最后八個元素設置為1 無需打印序列中的元素,您需要將它們轉換為32位int ,並將其存儲在輸出容器中。

設計:

  1. 定義組合的順序,以使一個優先,最后一個,並且每個在該順序中都具有位置。

  2. 編寫算法,根據您的訂購順序將一個序列轉換為下一個序列。

  3. 在代碼中實現該算法。

實現方式:

  1. 根據您的訂購將序列設置為第一個序列。

  2. 輸出當前序列。

  3. 如果這是最后一個序列,則停止。

  4. 使用您實現的算法轉到下一個序列。

  5. 轉到步驟2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM