返回首页 返回题库

奇偶校验

C++ 简单 GESP三级真题 #位运算

题目描述

题面描述

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

给定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

输出:

13 1

样例2

输入:

6
1 2 4 8 16 32

输出:

6 0

数据范围

对于所有测试点,保证1 ≤ n ≤ 10000,0 ≤ 每个数据 ≤ 10^9。

时间限制

1.0 s

内存限制

512.0 MB

💡 查看提示(先自己想一想再看)
考察位运算(num&1取二进制最低位、num>>=1右移一位)、循环(遍历每个数、遍历每个数的二进制位);解题思路是逐个读取数据,统计所有数二进制中1的总个数,总个数对2取余即为校验码;可直接读取一个数处理一个数,无需用数组存储所有数据以节省空间。
⚙ 开始做这道题 1 人做过 · 2 收藏 · 17 浏览

讨论(0)