>description
給出 n,b 和 d,要求找出 n 個由0或1組成的編碼(1 <= n <= 64),每個編碼有 b 位(1 <= b <= 8),使得兩兩編碼之間至少有 d 個單位的「hamming距離」(1 <= d <= 7)。「hamming距離」是指對於兩個編碼,他們二進位制表示法中的不同二進位制位的數目。
0101 0101 0100
與0010 0011 0100
因為有五個位不同,所以「hamming距離」是 5。
>input
一行,包括 n, b, d。
>output
n 個編碼(用十進位制表示),要排序,十個一行。如果有多解,你的程式要輸出這樣的解:假如把它化為2^b進製數,它的值要最小。
>sample input
16 7 3
>sample output
0 7 25 30 42 45 51 52 75 76
82 85 97 102 120 127
>解題思路
一開始還想不出來,但後來看到資料才發現還挺簡單的直接暴力即可,就是我太水了調了很久。
首先0肯定是在這n個數裡面的,然後再從小到大依次列舉後面的數,把當前列舉到的數i與每個已經選中的數比較,如果對於每個已經選中的數來說,i都符合條件(此處用到位運算異或),那麼選中i(就是把i列入數列)。
>**
#include
#include
#include
using namespace std;
int n,s,d,a[65]
;int main()
}if(yd)
continue
; a[
++a[0]
]=i;
printf
("%d "
,a[a[0]
]);if
(a[0]%
10==0)
printf
("\n");
//選中這個數順便輸出
}return0;
}
關於海明碼
1.確定冗餘位長度 設原始資料為n,冗餘位為k 則n k 1 2 k 1001011 共7位,則8 k 2 k k 4 冗餘位為4位 2.將原始資料新增校驗位組成碼字 校驗位的設定 2 0 2 1 2 2 2 3 1 2345 6789 1011 校驗校驗1校驗 001校驗 011 3.確定每個校驗...
海明碼與海明距離
一,海明碼 1 傳輸的資料 1101 2 校驗位計算公式 2 k k n 1,n為資料位 在本例中計算的k為3 用p1,p2,p3,表示校驗位,其中 p1,的位數2 0,p2,的位數2 1,p3,的位數2 2則 1 21 2 41 4 2 41 2 4 位數的二進位制 0001 0010 0011 ...
海明碼校驗原理
海明校驗的基本思想 將有效資訊按某種規律分成若干組,每組安排乙個校驗位,做奇偶測試,就能提供多位檢錯資訊,以指出最大可能是哪位出錯,從而將其糾正。實質上,海明校驗是一種多重校驗。海明校驗的特點 它不僅具有檢測錯誤的能力,同時還具有給出錯誤所在準確位置的能力。一 校驗位的位數 校驗位的位數與有效資訊的...