洛谷 B4358:[GESP202506 三级] 奇偶校验 ← 位运算

【题目来源】
https://www.luogu.com.cn/problem/B4358

【题目描述】
数据在传输过程中可能出错,因此接收方收到数据后通常会校验传输的数据是否正确,奇偶校验是经典的校验方式之一。
给定 n 个非负整数 c1,c2,…,cn 代表所传输的数据,它们的校验码取决于这些整数在二进制下 1 的数量之和的奇偶性。如果这些整数在二进制下共有奇数个 1,那么校验码为 1;否则校验码为 0。你能求出这些整数的校验码吗?

【输入格式】
第一行,一个正整数 n,表示所传输的数据量。
第二行,n 个非负整数 c1, c2, …, cn,表示所传输的数据。

【输出格式】
输出一行,两个整数,以一个空格分隔:
第一个整数表示 c1,c2,...,cn 在二进制下 1 的总数量;
第二个整数表示校验码(0 或 1)。

【输入样例】
4
71 69 83 80

【输出样例】
13 1

【数据范围】
对于所有测试点,保证 1≤n≤100,0≤ci≤255。

【算法分析】
GESP C++ 三级 必考的“位运算 + 循环计数”基础题。

【算法代码】

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n,x,cnt=0;
    cin>>n;
    for(int i=1; i<=n; i++) {
        int x;
        cin>>x;
        while(x) {
            cnt+=x&1;
            x>>=1;
        }
    }
    cout<<cnt<<" "<<(cnt&1);

    return 0;
}

/*
in:
4
71 69 83 80

out:
13 1
*/






【参考文献】
https://gesp.ccf.org.cn/101/attach/1699464809021472.pdf
https://www.luogu.com.cn/problem/solution/B4359

 

posted @ 2026-05-18 15:40  Triwa  阅读(52)  评论(0)    收藏  举报