CSP-S 2026 初赛试题解析(第二部分:阅读程序题(第一题))精讲
2026 CSP-S 第一轮真题第二部分·阅读程序第 1 题《二进制除法》答案是16对✅️17对✅️18错❌️19C20B21C。一、先认识题目中的“二进制除法”程序中有一个数组int gen[13] {1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1};它一共有 13 个元素下标 0 1 2 3 4 5 6 7 8 9 10 11 12 gen 1 1 0 0 0 0 0 0 0 1 1 1 1连起来就是1100000001111题目程序把输入的 32 位二进制字符串放进数组a然后用gen进行一系列异或操作最后输出a[32]到a[43]。我们先记住两个重要知识异或^两个相同的二进制位异或得到 0不同得到 1。模 2 除法在二进制多项式除法中减法可以用异或来完成不需要借位。二、逐段理解程序1. 读入 32 位二进制字符串cin s; for (int i 0; i 32; i) { a[i] s[i] - 0; }假设输入100100...cin s把整个字符串读入s。接着a[i] s[i] - 0;把字符0、1转换成整数0、1。例如字符s[i] - 0存入数组00a[i] 011a[i] 1所以数组a[0]到a[31]保存输入的 32 个二进制位。2. 给后面的 12 位补零for (int i 32; i 44; i) { a[i] 0; }循环让a[32], a[33], ..., a[43]全部变成 0。一共是44−3212也就是在原来的 32 位二进制串后面补上 12 个 0。为什么补 12 个因为gen有 13 位而它的最高位对应a[i]所以当程序处理到a[31]时仍然需要访问a[31 12]也就是a[43]因此数组必须准备到下标 43。3. 关键循环异或消除for (int i 0; i 32; i) { if (a[i] 0) continue; for (int j 0; j 13; j) { a[i j] ^ gen[j]; } }这是整道题的核心。我们先把异或的规则记住左边右边异或结果000011101110特别要记住所以两个相同的位异或后会变成 0。if (a[i] 0) continue;是什么意思如果当前位a[i]是 0就直接跳过本轮循环不做后面的异或操作。如果a[i]是 1就把gen的 13 个二进制位依次与a[i], a[i1], ..., a[i12]进行异或。由于gen[0] 1所以第一步一定会执行a[i] ^ 1;当a[i]原本是 1 时于是当前位就被消除了。这和二进制长除法的思路非常相似发现当前位是 1就把除数对齐到这一位用异或进行消除。三、判断题 16输入 32 个 0输出是不是 12 个 0题目说当输入为 32 个0时程序输出 12 个 0。我们来验证。如果输入全是 000000000000000000000000000000000那么a[0] 0; a[1] 0; ... a[31] 0;补零后a[32] 0; ... a[43] 0;接下来进入主循环for (int i 0; i 32; i) { if (a[i] 0) continue; ... }因为每个a[i]都是 0所以每次都会执行continue;也就是说内层异或循环一次都不会执行。最后输出for (int i 32; i 44; i) { cout a[i]; }输出的就是000000000000因此判断题 16对√四、判断题 17结束后a[0]到a[31]一定全为 0 吗题目说程序运行结束后数组a中下标从 0 到 31 的元素一定全部为 0。答案是对。为什么程序从左向右处理for (int i 0; i 32; i)对于每个位置i如果a[i] 0就跳过如果a[i] 1就用gen异或消除它。因为gen[0] 1所以当a[i] 1时第一位会变成1⊕101\oplus10而内层循环只会修改a[i], a[i1], ..., a[i12]不会修改比i更靠前的位置。因此已经处理完的位置不会再被后面的循环改变。可以把它想象成一排灯泡从左向右检查遇到亮着的灯泡就执行一次操作把它熄灭后面的操作不会再碰已经检查过的左边灯泡。最终a[0] 0 a[1] 0 ... a[31] 0所以判断题 17对√五、判断题 18删除补零循环会改变输出吗题目说若将第 1214 行为a[32]到a[43]补 0 的循环删除会改变程序输出结果。答案是错。这题有一个非常重要的 C 知识点。程序中int a[100];这里的a是定义在函数外面的全局数组。在 C 中全局变量如果没有显式初始化会自动进行零初始化。也就是说即使删除for (int i 32; i 44; i) { a[i] 0; }数组a[32]到a[43]仍然会自动是 0。因此这个补零循环实际上是重复做了一次已经自动完成的事情。删除它不会改变程序的输出。所以判断题 18错×记忆小卡片全局数组没有显式初始化时元素会自动初始化为 0。普通局部数组没有显式初始化时元素的值通常是不确定的不能直接当成 0 使用。六、单选题 19gen数组表示什么题目问关于第 6 行定义的数组gen下列说法正确的是哪一个选项A.gen共有 12 个元素表示一个 12 位的除数B.gen共有 13 个元素表示一个 13 位的被除数C.gen共有 13 个元素其中gen[0]是除数的最高位D.gen共有 13 个元素其中gen[12]是除数的最高位首先数一数int gen[13] {1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1};数组有 13 个元素下标是0 到 12对应的二进制串是1100000001111程序把gen[0]与a[i]对齐然后把gen[1]与a[i1]对齐依此类推。所以gen[0]对应二进制串最左边的位也就是最高位。因此正确选项是C七、单选题 20程序实现了什么功能题目问该程序实现的功能最准确的说法是哪个选项 B 的意思是将输入串视为 32 位二进制数 MM在其后补 12 个 0也就是计算 M×212M\times2^{12}再对它用1100000001111作模 2 除法求余数并输出 12 位余数。我们前面已经分析了输入的 32 位串被存入数组后面补 12 个 0从左向右处理每一位当前位为 1 时将除数对齐并异或最后输出下标 32 到 43 的 12 位结果。这正是二进制模 2 长除法的过程。因此正确选项是B为什么输出是 12 位除数是 13 位二进制数。在普通长除法中余数的位数小于除数的位数这里除数是 13 位所以余数最多是 12 位。程序输出for (int i 32; i 44; i) cout a[i];刚好输出 12 位。八、单选题 21删除continue后会发生什么题目问若将第 16 行if (a[i] 0) continue;删除说法正确的是哪一个选项A. 程序的结果不会改变B. 可能造成程序运行错误C. 程序能够正常输出一个 12 位0/1串但是输出结果与输入的s无关D. 程序运行结束后a[0]的值一定为 0正确选项是C我们来仔细理解。1. 原来有continue时if (a[i] 0) continue;如果当前位是 0就跳过异或。只有当前位为 1 时才执行内层循环。所以程序会根据输入的二进制串进行不同的操作。2. 删除continue后程序变成for (int i 0; i 32; i) { for (int j 0; j 13; j) { a[i j] ^ gen[j]; } }这时无论a[i]是 0 还是 1都会执行异或。而且循环次数完全固定i一定从 0 到 31j一定从 0 到 12每次都使用同一个固定的gen。因此程序对数组执行的操作序列不再取决于输入字符串s。虽然数组最初的前 32 位可能不同但每次异或操作都按固定顺序执行最终输出也会变成一个固定的 12 位串。所以程序仍然可以正常输出输出长度仍然是 12 位输出结果与输入的s无关。因此正确答案是C。九、第一题的六道小题答案汇总题号正确答案核心原因16√输入全 0所有位都跳过异或输出 12 个 017√从左向右消除每个处理过的位置最终为 018×全局数组会自动零初始化删除补零循环不影响输出19Cgen有 13 个元素gen[0]是最高位20B补 12 个 0 后进行模 2 除法输出 12 位余数21C删除continue后操作固定输出不再依赖输入串十、给同学们的三个重要知识点知识点 1异或可以用于二进制模 2 除法a[i j] ^ gen[j];异或的特点是0 ^ 0 0 0 ^ 1 1 1 ^ 0 1 1 ^ 1 0特别是1 ^ 1 0它可以用来消除当前位。知识点 2continue会跳过本轮循环剩余部分if (a[i] 0) continue;当条件成立时程序直接进入下一轮i循环后面的内层循环就不会执行。知识点 3全局数组会自动初始化int a[100];如果它是全局数组没有显式初始化时元素会自动变成 0。这也是判断题 18 的关键。这道题最核心的程序思想可以概括为从左向右扫描二进制串遇到 1 就用异或消除最后留下 12 位余数。

相关新闻

文化课教培数字化:课时自动核算 + 家校互动提升续费率完整方案

文化课教培数字化:课时自动核算 + 家校互动提升续费率完整方案

前言中小教培机构数字化转型,很多校长最先想到的功能是排课、消课,但在长期运营过程中,两个痛点会持续消耗机构大量人力成本:一是每月教师课时薪酬核算,二是老生续课留存。 尤其是文化课学科机构,课程类型复…

2026/9/24 16:33:40 阅读更多 →
Yii2 别名(Aliases)完全指南:从 `@` 符号到路径/URL 解析的底层机制

Yii2 别名(Aliases)完全指南:从 `@` 符号到路径/URL 解析的底层机制

后端Web框架 【免费下载链接】yii2 Yii 2: The Fast, Secure and Professional PHP Framework 项目地址: https://gitcode.com/gh_mirrors/yi/yii2 点击查看 免费下载 别名(Aliases)是 Yii 2 框架中表示文件路径和 URL 的轻量级符号机制&…

2026/9/24 16:33:40 阅读更多 →
使用 lego 通过百度云(Baidu Cloud)DNS 完成 ACME DNS-01 挑战:配置指南与源码实现解析

使用 lego 通过百度云(Baidu Cloud)DNS 完成 ACME DNS-01 挑战:配置指南与源码实现解析

网络安全密码学 【免费下载链接】lego Lets Encrypt/ACME client and library written in Go 项目地址: https://gitcode.com/gh_mirrors/le/lego 点击查看 免费下载 导读 本文以 lego 官方文档中 Baidu Cloud DNS 提供者页面(docs/content/dns/zz_gen…

2026/9/24 16:32:40 阅读更多 →

最新新闻

微网群分布式优化调度:目标级联法ATC原理与Matlab实现

微网群分布式优化调度:目标级联法ATC原理与Matlab实现

最近帮学生调一个微网群协调调度项目,模型不复杂,但第一次从集中式转到分布式时,问题一个接一个来。最后用目标级联法(ATC)把问题拆开,才把收敛曲线跑顺。这里整理一份从原理到Matlab实现的完整笔记&#x…

2026/9/24 19:36:05 阅读更多 →
随机积分入门:从布朗运动到伊藤积分的金融数学基础

随机积分入门:从布朗运动到伊藤积分的金融数学基础

1. 连续时间下的"积分"为什么需要另起炉灶1.1 经典积分在随机路径面前的两大失效点先抛一个我们在学习随机积分时最容易遇到的困惑:我们在微积分里明明已经学过了黎曼积分和勒贝格积分,为什么到了金融数学里还要专门搞一套"随机积分"…

2026/9/24 19:36:05 阅读更多 →
RTSP协议深度解析:信令握手、SDP解析与工程避坑指南

RTSP协议深度解析:信令握手、SDP解析与工程避坑指南

1. 这不是“又一个网络协议”,而是视频系统里真正扛压的底层信令通道你有没有遇到过这样的场景:监控平台突然卡顿,画面上雪花点密密麻麻;安防中控室大屏上,十几个摄像头画面同时花屏、断流;或者用OpenCV写了…

2026/9/24 19:36:05 阅读更多 →
Chat2DB完整上手指南:自然语言写SQL的免费数据库客户端

Chat2DB完整上手指南:自然语言写SQL的免费数据库客户端

Chat2DB完整上手指南:自然语言写SQL的免费数据库客户端 【免费下载链接】Chat2DB Chat2DB is a free, cross-platform, local-first database client and SQL workspace for developers, DBAs, analysts, and data teams. Connect to 40 databases, manage data, ed…

2026/9/24 19:36:05 阅读更多 →
MySQL索引失效幕后真相:LIKE后缀匹配如何用反向存储提升百倍性能

MySQL索引失效幕后真相:LIKE后缀匹配如何用反向存储提升百倍性能

老周上周被一条SQL搞得没脾气:客户表三千多万行,按手机尾号找客户,条件写的是WHERE phone LIKE %6688,一次查询跑了二十九秒,慢查询日志每天都被它霸榜。他在phone上明明建了索引,可执行计划里type还是ALL&…

2026/9/24 19:36:05 阅读更多 →
MySQL 9.1.0安装教程:Windows与Linux全流程保姆级指南

MySQL 9.1.0安装教程:Windows与Linux全流程保姆级指南

1. 写在安装之前:为什么9.1.0值得你重新折腾一遍MySQL 9.1.0 是 Oracle 在创新版(Innovation Release)序列里的重要一版,也是从 8.x 迈向新版本号体系之后,普通开发者最容易接触到的“第一个大版本跳跃”。很多人一看到…

2026/9/24 19:35:05 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →