✏️ 纠错
第 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的个数。
【参考程序】