✏️ 纠错
第 128 题 / 共 155 题

题目描述

数据在传输过程中可能出错,因此接收方收到数据后通常会校验传输的数据是否正确,奇偶校验是经典的校验方式之一。

给定 n 个非负整数 c1​,c2​,…,cn​ 代表所传输的数据,它们的校验码取决于这些整数在二进制下 1 的数量之和的奇偶性。如果这些整数在二进制下共有奇数个 1,那么校验码为 1;否则校验码为 0。你能求出这些整数的校验码吗?

输入格式

第一行,一个正整数 n,表示所传输的数据量。

第二行,n 个非负整数 c1​,c2​,…,cn​,表示所传输的数据。

输出格式

输出一行,两个整数,以一个空格分隔:

第一个整数表示 c1​,c2​,…,cn​ 在二进制下 1 的总数量;

第二个整数表示校验码(0 或 1)。

输入输出样例

输入 #1

4
71 69 83 80

输出 #1

13 1

输入 #2

6
1 2 4 8 16 32

输出 #2

6 0

说明/提示

对于所有测试点,保证 1≤n≤100,0≤ci​≤255。

📝 题目解析

【考纲知识点】算法:枚举法、位运算、进制转换

【解题思路1】

c&1可以取出数c二进制形式的最后一个1,c >>= 1可以将数c二进制形式右移一位。循环往复就可以取出数c二进制形式的所有1,再顺便统计下1的个数就行。

【程序解析1】

读取n个整数,对每个整数执行位运算处理:v += c & 1计算当前数的最低位并累加到v,c >>= 1右移一位继续处理,直到c为0。循环结束后输出v和v&1(v的奇偶性)。本质上是统计所有输入数字二进制表示中1的总个数,并判断这个总数的奇偶性。

【解题思路2】

将ci先编程二进制形式的字符串,然后遍历字符串统计1的个数。

【参考程序】
​​​​​​​