首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

URAL Hamming Code:海明碼糾錯邏輯實現

     編輯:關於C++

問題描述

4 個數據位 d1,d2,d3,d4 和 3 個校驗位 p1,p2,p3。校驗關系:

  • p1 = (d2 + d3 + d4) % 2
  • p2 = (d1 + d3 + d4) % 2
  • p3 = (d1 + d2 + d4) % 2

輸入 7 位(可能含 1 個錯誤),輸出糾正後的正確海明碼。保證輸入要么正確,要么僅 1 位錯誤。

糾錯邏輯

計算綜合症:

s1 = (d2+d3+d4 - p1) % 2
s2 = (d1+d3+d4 - p2) % 2
s3 = (d1+d2+d4 - p3) % 2

(s3,s2,s1) 作為二進制數指出錯誤位置(1~7),0 表示無錯誤。但本題只需枚舉修正:

  1. 檢查輸入是否滿足 3 個校驗方程,是 → 直接輸出。
  2. 否則枚舉翻轉 7 位中的每一位,檢查翻轉後是否滿足方程,輸出第一個滿足者(題目保證唯一)。

代碼實現

#include <iostream>
using namespace std;

bool check(int a1,int a2,int a3,int a4, int b1,int b2,int b3) {
    return (a1+a2+a4)%2==b3 && (a1+a3+a4)%2==b2 && (a2+a3+a4)%2==b1;
}

int main() {
    int a[7];
    while (cin>>a[0]) {
        for (int i=1;i<7;++i) cin>>a[i];
        if (check(a[0],a[1],a[2],a[3], a[4],a[5],a[6])) {
            for (int i=0;i<7;++i) { if(i) cout<<' '; cout<

關鍵細節

  1. 校驗方程對應:注意輸入順序:前 4 位 d1..d4,後 3 位 p1..p3(題目圖示順序)。代碼中 b1=p1, b2=p2, b3=p3。
  2. 枚舉修正:僅 7 種可能,暴力枚舉極簡且不易出錯。
  3. 輸出格式:空格分隔,換行結束。

複雜度

  • 時間:O(1) 每測試用例。

總結

URAL Hamming Code 是海明碼單錯誤糾正的直接實現。枚舉法雖非標準綜合症解碼,但利用題目「至多 1 位錯誤」約束,代碼極短、邏輯清晰、零邊界錯誤。理解海明碼校驗位覆蓋關系(每校驗位覆蓋特定數據位子集),是設計檢查函數的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved