GESP2025年6月认证C++三级( 第三部分编程题(1、奇偶校验)

张开发
2026/4/3 15:58:50 15 分钟阅读
GESP2025年6月认证C++三级( 第三部分编程题(1、奇偶校验)
《奇偶校验大冒险》 一、故事背景1、在“数据王国”里所有信息都会变成二进制传输例如数字 5 → 1012、国王布置了任务“数据在路上传输后要汇报一共有几个1而且要知道是奇数个1还是偶数个” 二、规则讲解1、规则统计所有数字中二进制里“1”的总个数2、然后判断如果是奇数个1 → 输出校验码 1如果是偶数个1 → 输出校验码 0 三、举个完整例子1、输入3 5 3 22、 第一步变成二进制数字二进制1的个数51012311221013、 第二步统计总数2 2 1 54、 第三步判断奇偶5 是奇数 → 输出校验码 15、输出5 1 四、核心算法1、我们要做三件事步骤1读入数据cin n;步骤2一个一个处理数字for(int i 0; i n; i)步骤3数每个数字里的“1”关键技巧来了while(x 0) { count (x 1); x 1; }2、重点解释1 (x 1) 是什么取最后一位6 110 → 最后一位是0 5 101 → 最后一位是12 x 1 是什么右移一位去掉最后一位101 → 10 → 1 → 0 五、完整代码#include iostream using namespace std; int main() { int n; cin n; int total 0; // 记录所有1的数量 for(int i 0; i n; i) { int x; cin x; // 统计x中1的个数 while(x 0) { total (x 1); // 看最后一位是不是1 x 1; // 去掉最后一位 } } // 输出总数 和 校验码 cout total (total % 2) endl; return 0; } 六、再来一个例子1、输入4 1 2 4 82、分析1 → 1 → 1个1 2 → 10 → 1个1 4 → 100 → 1个1 8 → 1000 → 1个13、总数1111 4校验码4 是偶数 → 04、输出4 0 七、总结统计所有1 循环右移算 最后看奇偶 校验就完成 八、进阶小技巧更快的方法C内置__builtin_popcount(x)直接统计1的个数 最后一句话总结这题本质就是统计所有数字的二进制中“1”的总个数

更多文章