我正在使用C++中的程序來演示編碼理論(使用線性代碼進行糾錯)的工作原理。我將奇偶位添加到一串位('字')。這樣,我仍然可以看到傳輸過程中如果某些位已更改(錯誤檢測和糾正)時所使用的信息。要知道的一個重要的事情是兩個詞之間的最小距離。爲了計算這個,我需要編譯所有可能的單詞列表,並將它們相互比較。如果我的糾錯碼由長度爲n = 6的單詞組成,則會有2^6 = 64個可能的組合。我的問題是關於如何生成所有這些可能的單詞並將它們存儲在一個數組中。所有可能的組合位
這些是什麼,這些話看起來像兩個實例:
0 0 0 0 0 0
1 0 0 0 0 0
1 1 0 1 0 1
我知道我可以用這樣的算法產生兩個數字的組合:
for (int i = 1; i <= 5; i++)
for (int j = 2; j <= 5; j++)
if (i != j)
cout << i << "," << j << "," << endl;
然而,這個代碼只生成兩個數字的組合,並使用除1或0以外的數字。
編輯
我已經創建了幾個循環來完成這項工作。這是不是特別優雅:
int bits[64][6] = { 0 };
for (int x = 0; x < 32; x++)
bits[x][0] = 1;
for (int x = 0; x < 64; x += 2)
bits[x][1] = 1;
for (int x = 0; x < 64; x += 4)
{
bits[x][2] = 1;
bits[x + 1][2] = 1;
}
for (int x = 0; x < 64; x += 8)
{
bits[x][3] = 1;
bits[x + 1][3] = 1;
bits[x + 2][3] = 1;
bits[x + 3][3] = 1;
}
for (int x = 0; x < 64; x += 16)
{
for (int i = 0; i < 8; i++)
bits[x + i][4] = 1;
}
for (int x = 0; x < 64; x += 32)
{
for (int i = 0; i < 16; i++)
bits[x + i][5] = 1;
}
環路打印的COUT兩個數字,所以你怎麼能指望你的代碼打印出6個數字0或1的單詞? – 2015-02-09 12:17:59