[英]generating specific 32-bit binary sequence
我需要生成這樣的32位二進制序列:它具有八個'1',其余位為'0'。 如此寫成十六進制,一些序列將如下所示:
000000FF
000001FE
000001FD
000001FB
000001F7
...
問題是要從32個中選擇8個,因此有10518300個組合。 換句話說,有10518300個序列,例如我的示例。 如果您給我任何建議或算法來生成所需序列,我將不勝感激。
這個問題是關於零和一的排列。 最簡單的編碼解決方案是使用next_permutation
和vector<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
,並將其存儲在輸出容器中。
設計:
定義組合的順序,以使一個優先,最后一個,並且每個在該順序中都具有位置。
編寫算法,根據您的訂購順序將一個序列轉換為下一個序列。
在代碼中實現該算法。
實現方式:
根據您的訂購將序列設置為第一個序列。
輸出當前序列。
如果這是最后一個序列,則停止。
使用您實現的算法轉到下一個序列。
轉到步驟2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.