2026年全国青少年信息素养大赛复赛真题算法应用主题赛C小学组带解析7月18日试卷一【文末附答案和解析】一、单项选择题第1题突击队在过桥时遇到一个复杂的判断指令if桥没断 没有敌人 || 我们有重火力。如果侦察兵发现桥已经断了第一个条件为假C 程序会怎么做A. 继续判断后面有没有敌人B. 继续判断后面有没有重火力C. 直接判定整个条件为假D. 程序会报错崩溃第2题哨兵在潜伏时需要记录前方道路是安全字符 ‘S’还是危险字符 ‘D’的状态。下面哪种数据类型最适合用来存储这种状态A. intB. doubleC. boolD. char第3题某部队将 10 袋小米平分给 3 个排用 C 表达式10 % 3计算剩下的小米袋数得出结果是多少A. 1B. 3C. 30D. 0第4题n 名战士组成的队伍排成了一字长蛇阵第一个人在最左第 n 个人在最右可类比为 C 数组。要求在第 k 个战士的左边插入一名新来的向导队伍总人数变为 n1。为了保证队形不乱一个位置同时只能站一个人那么其他战士应该怎么有序移动调整队形方便向导入队A. 从左到右把第 k 个到第 n 个战士依次向右移一个位置B. 从右到左把第 n 个到第 k 个战士依次向右移一个位置C. 不需要移动直接把向导放在第 k 个位置即可D. 从右到左把第 n 个到第 k1 个战士依次向右移一个位置第5题在红军某部通讯系统中0 代表原地整备。以下 C 表达式的值不为 0 的是A.4 % 2B.15 - 3 * 5C.2 / 5D.10 / 3二、多项选择题第6题如下的代码可以计算行军速度speed。distance 代表里程days 代表行军天数。以下说法正确的是intdistance5;intdays2;doublespeed1distance/days;doublespeed2(double)distance/days;A. speed1 的值是 2.5B. speed1 的值小于 speed2C. speed2 的值是 2.5D. 比起 speed2speed1 的结果更准确第7题我们用 for 循环和 while 循环模拟红军的不同任务下列理解正确的是A. for 循环通常更适合用于已知任务天数的场景循环次数已知例如行军 n 天B. while 循环通常更适合用于不知道要守几天但只要大部队没到就一直坚守未知循环次数但知道结束条件的场景C. for 循环和 while 循环是可以互相等价替换的D. while 循环里不能潜伏隐藏嵌套for 循环第8题这段代码用来统计 5 个连队上报的粮食数量。关于这段代码的运行情况以下分析正确的是#includeiostreamusingnamespacestd;intmain(){inta[5]{10,20,30,40,50};intsum0;for(inti1;i4;i){suma[i];}coutsumendl;return0;}A. 这段代码最终的输出结果是 140B. 这段代码最终的输出结果是 150C. 这段代码不能够正确统计 5 个连队的粮食总和D. 如果想要正确统计 5 个连队的粮食总和必须把循环条件改成i 5第9题红军情报小队正在研究质数素数相关的加密方法以下关于质数的逻辑正确的是A. 2 是最小的质数B. 不存在两个相邻差为 1的质数C. 所有的奇数都是质数D. 埃氏筛是一种可以高效找出一段范围内所有质数的算法第10题下列符合 C 编程良好书写习惯的是A. 代码语句末尾必须书写分号B. 变量命名尽量通俗易懂C. 循环嵌套层数越多代码越优秀D. 重复代码尽量简化处理三、编程实战题编程题1筹备行军包题目描述红军即将踏上新的征程后勤部的同志们正在紧急组装行军包。目前后勤部仓库里共有x份干粮和y份弹药。根据指挥部的要求每一个标准行军包中必须严格包含a份干粮和b份弹药缺一不可。请你编写一个程序帮助后勤部计算一下利用现有的物资最多能组装出多少个完整的标准行军包多余的无法凑成一整包的物资不予计算。输入格式输入共一行包含四个正整数x, y, a, b数字之间用一个空格隔开。输出格式输出共一行包含一个整数表示最多能组装出的完整行军包数量。样例输入10 10 2 3样例输出3编程题2取用军粮题目描述红军在大本营休整完毕部队后勤部需要从大本营仓库中带走正好 N 斤的军粮再启程出发。仓库目前有两种规格的粮食大袋青稞面每袋5斤和小袋黄米每袋3斤。请你编写程序算一算如果要刚好拿走 N 斤粮食总共有多少种不同的搭配方案粮食必须整袋拿不能拆开。允许某种粮食不拿即袋数可以为0。数据保证有解。输入格式一个正整数 N表示需要的粮食总斤数。输出格式一个整数表示搭配方案的总数。样例输入15样例输出2编程题3壮大队伍题目描述初始有 1 名红军同志进入一个新的地区在第一个月里发展了 x 名新同志加入组织。假设每一名新加入的同志在下一个月都会各自去发展 x 名新同志加入同时老同志每个月也会继续发展 x 名新同志。按照这个规律第 n 个月结束时该地区一共有多少名革命同志输入格式共一行包含两个正整数 x 和 n中间用空格隔开。x 表示每人每月发展的新同志数量n 表示发展的月数。输出格式一个整数表示第 n 个月结束时该地区革命同志的总人数。样例输入2 3样例输出27编程题4夜行军的信号题目描述我们用大写字母组成的字符串表示红军原本的信号序列s 是其压缩后的结果压缩规则如下连续重复的字母就把它们压缩成字母 连续出现的次数的形式。例如连续的 AAAA 压缩为 A4连续的 BB 压缩为 B2。如果某个字母只孤立地出现了一次没有连续重复不需要加数字保留原样即可例如 C 依然是 C不写成 C1。例如s “A4B2”则原本的信号序列字符串是 “AAAABB”。通信兵按照原本的信号序列字符串发信号时第 1 次打出第 1 个字母第 2 次打出第 2 个字母……当打完最后一个字母后通信兵又会立刻从头开始打第 1 个字母如此循环往复。请你帮他算一算通信兵打出的第 n 个信号对应哪个字母数据范围压缩串长度小展开后长度极大直接拼接字符串会超时、内存溢出只能拿到部分分数必须使用分段统计写法拿满分。输入格式第一行一个仅由大写英文字母与数字组成的字符串 s表示压缩后的信号序列第二行一个正整数 n表示需要查询的是第 n 个信号输出格式输出共 1 行一个大写英文字母。样例输入ABC 4样例输出A参考答案与解析一、单项选择题第 1 题答案C解析在 C 中逻辑与运算符具有短路求值特性。当第一个条件为假时整个表达式的结果已经确定为假程序不会继续判断后面的条件直接判定整个条件为假也不会报错崩溃。第 2 题答案D解析题目要求存储字符 ‘S’ 或 ‘D’最适合的数据类型是char。虽然bool可以表示两种状态但题目明确指定存储字符用char更直观合适。int和double虽然也能存储字符的 ASCII 码值但不是最佳选择。第 3 题答案A解析%是取模取余运算符。10 % 3计算的是 10 除以 3 的余数10 ÷ 3 3 余 1所以结果是 1。第 4 题答案D解析要在第 k 个战士的左边插入新向导新向导最终占据原第 k 个位置。原第 k 个到第 n 个战士都需要向右移动一个位置。为保证移动过程中数据不被覆盖必须从右到左移动先移动第 n 个再移动第 n-1 个最后移动第 k 个。选项 D 描述的是从右到左移动第 n 个到第 k1 个这是正确的操作方式。第 5 题答案D解析逐项计算A 选项4 % 2 0值为 0B 选项15 - 3 * 5 15 - 15 0值为 0C 选项2 / 5 0整数除法结果为 0值为 0D 选项10 / 3 3整数除法截断小数部分值为 3不为 0二、多项选择题第 6 题答案B、C解析distance / days中两个操作数都是int类型执行整数除法5 / 2 2所以speed1 2.0不是 2.5(double) distance / days将 distance 转换为 double 类型执行浮点数除法5.0 / 2 2.5所以speed2 2.5因此speed1 2.0小于speed2 2.5speed2 的结果更准确speed1 丢失了小数部分第 7 题答案A、B、C解析A 选项正确for 循环适合循环次数已知的场景B 选项正确while 循环适合循环次数未知但知道终止条件的情况C 选项正确for 循环和 while 循环在功能上可以互相等价转换D 选项错误while 循环中可以嵌套 for 循环这是允许的第 8 题答案A、C解析数组a[5] {10, 20, 30, 40, 50}下标从 0 到 4循环for(int i 1; i 4; i)累加的是a[1] a[2] a[3] a[4] 20 30 40 50 140输出结果是 140所以 A 正确B 错误漏掉了a[0] 10不能正确统计 5 个连队的总和所以 C 正确想要正确统计应改为for(int i 0; i 5; i)改为i 5会导致数组越界访问所以 D 错误第 9 题答案A、D解析A 选项正确2 是最小的质数也是唯一的偶质数B 选项错误2 和 3 是相邻的质数差为 1所以存在相邻质数C 选项错误并不是所有奇数都是质数例如 9、15、21 等都是奇数但不是质数D 选项正确埃氏筛埃拉托斯特尼筛法是一种高效的批量找质数算法第 10 题答案A、B、D解析A 选项正确C 中每条语句必须以分号结尾B 选项正确变量命名应通俗易懂提高代码可读性C 选项错误循环嵌套层数过多会使代码复杂难懂并非越优秀D 选项正确重复代码应尽量简化处理例如封装成函数或循环三、编程实战题编程题1筹备行军包思路分析要组装尽可能多的完整行军包每个包需要a份干粮和b份弹药。现有干粮x份最多能支持的包数为x / a整数除法向下取整。现有弹药y份最多能支持的包数为y / b。实际能组装的包数受限于两者中的较小值因为干粮和弹药必须同时满足。因此答案就是min(x / a, y / b)。代码实现#includebits/stdc.husingnamespacestd;intmain(){intx,y,a,b;// x:干粮总数, y:弹药总数, a:每包需干粮, b:每包需弹药cinxyab;intansmin(x/a,y/b);// 取干粮和弹药各自能支撑的包数的最小值coutans;return0;}编程题2取用军粮思路分析要刚好凑齐 N 斤粮食大袋每袋 5 斤小袋每袋 3 斤。可以枚举大袋的数量i从 0 到N / 5大袋不能超过总量。剩余重量remain N - i * 5如果remain能被 3 整除说明可以用若干小袋凑齐方案数加 1。因为允许某种粮食袋数为 0所以i从 0 开始枚举即可。数据保证有解不需要额外处理无解情况。代码实现#includebits/stdc.husingnamespacestd;intmain(){intN;// N: 需要带走的粮食总斤数cinN;intans0;// 方案总数for(inti0;i*5N;i){// 枚举大袋(5斤)的数量iintremainN-i*5;// 扣除大袋后的剩余重量if(remain%30){// 剩余重量能否被小袋(3斤)凑齐ans;// 能凑齐则方案数加1}}coutans;return0;}编程题3壮大队伍思路分析每个月每一名现有的同志都会发展 x 名新同志。这意味着下个月的总人数 本月人数 本月人数 × x 本月人数 × (x 1)。初始有 1 人第 1 个月结束人数为1 × (x1)第 2 个月为( x 1 ) 2 (x1)^2(x1)2以此类推。所以第 n 个月结束时总人数为( x 1 ) n (x 1)^n(x1)n。用循环累乘即可注意使用long long防止溢出。代码实现#includebits/stdc.husingnamespacestd;intmain(){longlongx,n;// x:每人每月发展人数, n:月数cinxn;longlongtotal1;// 初始总人数为1for(inti1;in;i){// 循环n次, 每次人数乘以(x1)totaltotal*(x1);}couttotal;return0;}编程题4夜行军的信号思路分析本题不能直接展开压缩串否则会超时或内存溢出。可以使用分段统计第一次遍历压缩串解析每个字母及其重复次数如果没有数字次数为1累加得到展开后的总长度totalLen。因为信号循环发送第n个位置在循环中的实际偏移为(n-1) % totalLen从0开始计数。第二次遍历压缩串累加每个字母的重复次数当累加长度超过目标偏移时当前字母即为答案。代码实现#includebits/stdc.husingnamespacestd;intmain(){string s;//压缩后的信号串longlongn;//查询第n个信号cinsn;// 第一遍计算展开后的总长度longlongtotalLen0;//展开总字符数for(inti0;is.size();i){if(s[i]As[i]Z){//遇到字母charchs[i];//当前字母intcnt0;//重复次数i;//移到数字部分while(is.size()s[i]0s[i]9){//解析数字cntcnt*10(s[i]-0);i;}i--;//回退外层i会if(cnt0)cnt1;//无数字则为1totalLencnt;//累加总长}}longlongpos(n-1)%totalLen;//循环中的目标偏移// 第二遍查找对应字母longlongcur0;//已遍历长度for(inti0;is.size();i){if(s[i]As[i]Z){charchs[i];intcnt0;i;while(is.size()s[i]0s[i]9){cntcnt*10(s[i]-0);i;}i--;if(cnt0)cnt1;if(curcntpos){//目标落在该字母段内coutchendl;return0;}curcnt;}}return0;}关注老师的专栏查看完整版全国青少年信息素养大赛C备赛资料初赛复赛https://blog.csdn.net/weixin_66461496/category_12969975.html相关课程《全国青少年信息素养大赛C初赛真题试卷及答案解析》视频课https://www.bilibili.com/cheese/play/ss447406764相关课程《全国青少年信息素养大赛C复赛真题试卷及答案解析》视频课https://www.bilibili.com/cheese/play/ep2532538各种学习资料助力大家一站式学习和提升#includebits/stdc.husingnamespacestd;intmain(){cout########## 一站式掌握信奥赛知识! ##########;cout############# 冲刺信奥赛拿奖! #############;cout###### 课程购买后永久学习不受限制! ######;return0;}【秘籍汇总】完整csp信奥赛C学习资料1、csp/信奥赛C完整信奥赛系列课程永久学习https://edu.csdn.net/lecturer/7901 点击跳转2、CSP信奥赛C竞赛拿奖视频课https://edu.csdn.net/course/detail/40437 点击跳转https://edu.csdn.net/course/detail/41081 点击跳转3、csp信奥赛高频考点知识详解及案例实践CSP信奥赛C动态规划https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转CSP信奥赛C标准模板库STLhttps://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转信奥赛C提高组csp-s知识详解及案例实践https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转4、csp信奥赛冲刺一等奖有效刷题题解信奥赛C普及组CSP-J一等奖通关刷题题单及题解https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转信奥赛C普及组csp-j初赛复赛真题题解持续更新https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转信奥赛C提高组csp-s初赛复赛真题题解持续更新https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转5、GESP C考级真题题解GESP(C 一级二级三级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转GESP(C 四级五级六级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转GESP(C 七级八级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转· 文末祝福 ·#includebits/stdc.husingnamespacestd;intmain(){cout跟着王老师一起学习信奥赛C;cout 成就更好的自己 ;cout csp信奥赛一等奖属于你! ;return0;}