NOIP2026 全国青少年信息学奥林匹克联赛普及组试题及详细答案_第1页
NOIP2026 全国青少年信息学奥林匹克联赛普及组试题及详细答案_第2页
NOIP2026 全国青少年信息学奥林匹克联赛普及组试题及详细答案_第3页
NOIP2026 全国青少年信息学奥林匹克联赛普及组试题及详细答案_第4页
NOIP2026 全国青少年信息学奥林匹克联赛普及组试题及详细答案_第5页
已阅读5页,还剩7页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NOIP2026全国青少年信息学奥林匹克联赛普及组试题及详细答案NOIP2026普及组初赛试题(笔试)考试时长:90分钟满分:100分答题说明:答案全部写在答题卡上,写在试卷上无效;程序设计题目默认C++语言,不支持Python、Java等其他语言;所有数据范围严格遵循题目限定。一、单项选择题(共15题,每题2分,共30分)1.以下不属于计算机基础逻辑结构的是()A.顺序结构B.分支结构C.递归结构D.循环结构2.二进制数110101转换为十进制数的结果是()A.51B.53C.49D.573.时间复杂度为O(nlogn)的排序算法是()A.冒泡排序B.快速排序C.选择排序D.插入排序4.栈的核心操作特性是()A.先进先出B.先进后出C.随机存取D.有序插入5.一棵有1024个节点的完全二叉树,其叶子节点数量不可能为()A.512B.513C.511D.以上都不对6.在C++中,int类型变量的取值范围通常为()A.-128~127B.0~65535C.-2147483648~2147483647D.0~21474836477.下列关于队列的说法正确的是()A.队列可以在任意位置删除元素B.队列只能在队尾入队、队首出队C.队列是无序数据结构D.队列的时间复杂度高于栈8.十进制数67转换为八进制数是()A.103B.83C.123D.739.下列语句中,属于循环结构的是()A.ifB.switchC.whileD.else10.图的广度优先遍历(BFS)主要借助的数据结构是()A.栈B.队列C.数组D.链表11.下列哪个不是合法的C++变量名()A.num1B._scoreC.1ageD.max_val12.排序算法中,稳定排序的是()A.希尔排序B.冒泡排序C.快速排序D.堆排序13.一棵深度为5的满二叉树,总节点数为()A.16B.31C.32D.1514.C++中,逻辑运算符“与”的符号是()A.||B.&&C.&D.|15.解决最短路径问题的经典算法是()A.DFSB.BFSC.DijkstraD.Kruskal二、判断题(共10题,每题2分,共20分,正确选√,错误选×)1.链表的存储地址是连续的,数组的存储地址是离散的。()2.递归算法一定包含终止条件,否则会出现死递归。()3.时间复杂度O(n²)的算法一定比O(nlogn)的算法运行速度慢。()4.二叉树的每个节点最多有两个子节点。()5.C++中,char类型变量可以存储数字和字母字符。()6.哈希表查找的平均时间复杂度为O(1)。()7.图的最小生成树一定是唯一的。()8.for循环语句可以嵌套使用,嵌套层数无硬性限制。()9.栈可以实现深度优先搜索(DFS)。()10.所有循环结构都可以改写为递归结构。()三、问题求解(共2题,每题5分,共10分)1.现有一串数字序列:2,5,1,8,3,7,4,6,采用冒泡排序进行升序排序,请问需要进行多少轮完整的冒泡遍历?每一轮遍历后,末尾有序序列的长度分别是多少?2.一个无向连通图有6个顶点、8条边,该图的最小生成树包含多少条边?若删除一条边后图仍连通,删除的边一定不是什么类型的边?四、程序阅读题(共4题,每题5分,共20分)阅读下列C++程序代码,写出程序运行输出结果。程序1PlainText

#include<iostream>

usingnamespacestd;

intmain(){

inta=10,b=3;

intc=a%b+a/b;

cout<<c;

return0;

}程序2PlainText

#include<iostream>

usingnamespacestd;

intmain(){

intsum=0;

for(inti=1;i<=5;i++){

if(i%2==0)sum+=i;

}

cout<<sum;

return0;

}程序3PlainText

#include<iostream>

usingnamespacestd;

intf(intx){

if(x==1)return1;

returnf(x-1)*2;

}

intmain(){

cout<<f(5);

return0;

}程序4PlainText

#include<iostream>

usingnamespacestd;

intmain(){

intarr[5]={1,3,5,7,9};

intans=0;

for(inti=0;i<5;i++){

ans+=arr[i]*(i+1);

}

cout<<ans;

return0;

}五、程序完善题(共2题,每空2分,共20分)1.以下程序功能:输入一个正整数n,计算1~n的阶乘之和(S=1!+2!+3!+...+n!),补全代码空缺部分。PlainText

#include<iostream>

usingnamespacestd;

intmain(){

intn;

cin>>n;

longlongsum=0,fac=1;

for(inti=1;i<=n;i++){

fac=__________;

sum=__________;

}

cout<<sum;

return0;

}2.以下程序功能:统计一个字符串中小写字母的个数,忽略大写字母、数字和符号,补全代码空缺部分。PlainText

#include<iostream>

#include<string>

usingnamespacestd;

intmain(){

strings;

cin>>s;

intcnt=0;

for(inti=0;i<__________;i++){

if(s[i]>='a'&&__________){

cnt++;

}

}

cout<<__________;

return0;

}NOIP2026普及组复赛试题(上机)考试时长:3小时满分:400分每题分值:100分答题说明:每题独立提交,仅可使用C++语言;输入输出严格按照题目格式,无多余空格、换行;数据范围严格遵循题目限定。T1数字求和(100分)题目描述给定两个正整数L、R,求区间[L,R]内所有整数的数位之和的总和。例如L=12,R=14,数字12、13、14的数位和分别为3、4、5,总和为12。输入格式一行两个正整数L、R。输出格式一行一个整数,表示区间数位和总和。数据范围1≤L≤R≤100000样例输入1214样例输出12T2最大子段乘积(100分)题目描述给定一个包含整数(正数、负数、零)的长度为n的序列,找出该序列中连续子段的最大乘积。子段长度至少为1。输入格式第一行一个整数n,表示序列长度。第二行n个整数,为序列的各个元素。输出格式一行一个整数,表示最大子段乘积。数据范围1≤n≤1000,序列元素绝对值不超过100样例输入52-3-412样例输出24T3选课方案(100分)题目描述小明有m个学分额度,现有n门选修课,每门课程有对应的学分和难度值。每门课程只能选或不选,不能重复选择。请在总学分不超过m的前提下,选出难度值总和最大的课程组合。输入格式第一行两个整数n、m,分别为课程数量、学分额度。接下来n行,每行两个整数w、v,分别表示单门课程的学分、难度值。输出格式一行一个整数,表示最大难度值总和。数据范围1≤n≤200,1≤m≤200,1≤w,v≤100样例输入35233445样例输出7T4迷宫遍历(100分)题目描述给定一个n行m列的迷宫,'.'表示可通行空地,'#'表示障碍物,起点为(1,1),终点为(n,m)。每次只能向上、下、左、右四个方向移动,不能走出迷宫边界,不能穿过障碍物。求从起点到终点的最短路径长度(起点步数为1)。若无法到达终点,输出-1。输入格式第一行两个整数n、m。接下来n行,每行一个长度为m的字符串,表示迷宫地图。输出格式一行一个整数,表示最短路径长度,无法到达输出-1。数据范围1≤n,m≤50样例输入33..#...#..样例输出5NOIP2026普及组全套详细答案&解析一、初赛试题答案与解析(一)单项选择题答案(15×2=30分)1.C2.B3.B4.B5.A6.C7.B8.A9.C10.B11.C12.B13.B14.B15.C核心解析1.程序三大基础逻辑结构为顺序、分支、循环,递归是算法实现方式,不属于基础结构。2.110101二进制转十进制:32+16+4+1=53。3.冒泡、选择、插入排序时间复杂度均为O(n²),快速排序平均复杂度O(nlogn)。4.栈遵循先进后出原则,队列遵循先进先出。5.1024个节点的完全二叉树,叶子节点固定为512个,无其他可能。6.标准32位int类型取值范围为-2^31~2^31-1。10.BFS广度优先遍历依赖队列存储每层节点。11.C++变量名不能以数字开头。12.冒泡排序是稳定排序,其余选项均为不稳定排序。13.深度为k的满二叉树节点总数为2^k-1,5层为31。15.Dijkstra算法用于求解单源最短路径,Kruskal用于最小生成树。(二)判断题答案(10×2=20分)1.×2.√3.×4.√5.√6.√7.×8.√9.√10.√核心解析1.数组地址连续,链表地址离散。3.时间复杂度为理论增长趋势,小数据范围下O(n²)可能更快。7.无向图最小生成树可能不唯一。(三)问题求解答案(2×5=10分)1.答案:共需要7轮完整遍历;有序序列长度依次为1、2、3、4、5、6、7。解析:8个元素冒泡排序,最多需要n-1=7轮遍历。每轮遍历将当前最大值沉至末尾,有序长度逐轮+1。2.答案:最小生成树5条边;删除的边一定不是桥(割边)。解析:n个顶点的最小生成树固定n-1条边;桥是连通图的关键边,删除桥会导致图不连通。(四)程序阅读答案(4×5=20分)程序1输出:4解析:10%3=1,10/3=3,1+3=4程序2输出:12解析:累加1~5偶数,2+4=6?修正:2+4=6,输出6程序3输出:16解析:递归计算2^4=16,f(1)=1,f(2)=2,f(3)=4,f(4)=8,f(5)=16程序4输出:75解析:1×1+3×2+5×3+7×4+9×5=1+6+15+28+45=75(五)程序完善答案(每空2分,共20分)1.第一空:fac*i第二空:sum+fac2.第一空:s.size()第二空:s[i]<='z'第三空:cnt二、复赛试题满分题解(含代码+思路+易错点)T1数字求和(满分100)解题思路:暴力枚举区间[L,R]所有数字,逐个拆解每一位数位求和,累加得到总结果。数据范围较小,暴力枚举完全可行,无需数位DP。满分代码PlainText

#include<iostream>

usingnamespacestd;

intget_sum(intx){

intres=0;

while(x>0){

res+=x%10;

x/=10;

}

returnres;

}

intmain(){

intL,R;

cin>>L>>R;

intans=0;

for(inti=L;i<=R;i++){

ans+=get_sum(i);

}

cout<<ans;

return0;

}易错点:遗漏区间端点数值、数位拆解时未处理高位数字、变量溢出(本题数据小无需考虑)。T2最大子段乘积(满分100)解题思路:乘积问题与求和不同,负数乘负数可得到正数,因此需要同时维护当前最大值和当前最小值。遍历数组,每次更新最大、最小值,同步更新全局答案。满分代码PlainText

#include<iostream>

#include<algorithm>

usingnamespacestd;

intmain(){

intn;

cin>>n;

inta[1005];

for(inti=0;i<n;i++)cin>>a[i];

intmaxn=a[0],minn=a[0],ans=a[0];

for(inti=1;i<n;i++){

intt=maxn;

maxn=max({a[i],maxn*a[i],minn*a[i]});

minn=min({a[i],t*a[i],minn*a[i]});

ans=max(ans,maxn);

}

cout<<ans;

return0;

}易错点:仅维护最大值,忽略负数反转最值的情况;未初始化答案为第一个元素。T3选课方案(01背包,满分100)解题思路:经典01背包模板题,学分对应背包容量,难度值对应物品价值,每个课程只能选一次,求容量不超m的最大价值。满分代码PlainText

#include<iostream>

#include<algorithm>

usingnamespacestd;

intdp[205];

intmain(){

intn,m;

cin>>n>>m;

for(inti=1;i<=n;i++){

intw,v;

cin>>w>>v;

for(intj=m;j>=w;j--){

dp[j]=max(dp[j],dp[j-w]+v);

}

}

cout<<dp[m];

return0;

}样例解释:选择学分2+3的两门课,总学分5,难度3+4=7,为最优解。易错点:背包遍历顺序错误(正序遍历变为完全背包)、数组初始化异常。T4迷宫遍历(BFS最短路,满分100)解题思路:网格最短路经典问题,BFS天然求解无权图最短路。用队列存储坐标和步数,标记已访问节点,避免重复遍历,到达终点直接返回步数。满分代码PlainText

#include<iostream>

#include<queue>

#include<cstring>

usingnamespacestd;

structNode{

intx,y,step;

};

intn,m;

charmp[55][55];

boolvis[55][55];

intdx[4]={-1,1,0,0};

intdy[4]={0,0,-1,1};

intmain(){

cin>>n>>m;

for(inti=1;i<=n;i++){

for(intj=1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论