luogu1461海明碼 位運算 暴力

2021-09-25 22:35:56 字數 1167 閱讀 2189

>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 ...

海明碼校驗原理

海明校驗的基本思想 將有效資訊按某種規律分成若干組,每組安排乙個校驗位,做奇偶測試,就能提供多位檢錯資訊,以指出最大可能是哪位出錯,從而將其糾正。實質上,海明校驗是一種多重校驗。海明校驗的特點 它不僅具有檢測錯誤的能力,同時還具有給出錯誤所在準確位置的能力。一 校驗位的位數 校驗位的位數與有效資訊的...