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

下载本文档

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

文档简介

2026年全国青少年信息学奥林匹克普及组(NOIP)模拟试题及详细答案考试时长:4小时满分:400分答题须知1.所有程序必须使用标准C++语言编写,禁止使用特殊编译器扩展语法。2.所有题目输入输出严格按照样例格式,不得额外输出空格、换行、提示语句。3.程序运行时间限制每题1s,内存限制256MB。第一部分单项选择题(共15题,每题2分,共30分)1.下列不属于计算机基本逻辑结构的是()A.顺序结构B.分支结构C.递归结构D.循环结构2.二进制数110101转换为十进制数的结果是()A.51B.53C.49D.573.一个int类型变量在32位编译器下占用的字节数为()A.1B.2C.4D.84.下列排序算法中,时间复杂度不受数据初始状态影响,恒为O(n²)的是()A.冒泡排序B.选择排序C.插入排序D.快速排序5.栈的特点是()A.先进先出B.先进后出C.随机存取D.有序存储6.已知a=5,b=2,表达式a%b+a/b的值为()A.2B.3C.4D.57.下列语句中,能够正确定义一维数组的是()A.inta[];B.inta[5]={1,2,3,4,5,6};C.intn=5,a[n];D.inta[5]={1,2};8.一棵有10个节点的二叉树,最少层数为()A.3B.4C.5D.109.下列不属于循环语句的是()A.ifB.forC.whileD.do-while10.十进制数26转换为二进制数为()A.11000B.11010C.10110D.1110011.C++语言中,continue语句的作用是()A.结束整个循环B.结束本次循环,进入下一次循环C.退出程序D.跳出嵌套循环12.队列的典型应用场景是()A.函数递归调用B.浏览器后退C.排队系统D.表达式求值13.下列变量名合法的是()A.1numB.num_1C.num#1D.int14.时间复杂度最低的查找算法是(有序数组)()A.顺序查找B.二分查找C.哈希查找D.遍历查找15.逻辑表达式true&&!false的结果为()A.0B.1C.不确定D.报错第二部分程序阅读题(共4题,每题8分,共32分)阅读程序,写出程序运行结果程序1cpp

#include<iostream>

usingnamespacestd;

intmain(){

ints=0;

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

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

}

cout<<s<<endl;

return0;

}程序2cpp

#include<iostream>

usingnamespacestd;

intf(intx){

if(x==1)return1;

returnx*f(x-1);

}

intmain(){

cout<<f(5)<<endl;

return0;

}程序3cpp

#include<iostream>

usingnamespacestd;

intmain(){

inta=10,b=20;

a=a+b;

b=a-b;

a=a-b;

cout<<a<<""<<b<<endl;

return0;

}程序4cpp

#include<iostream>

usingnamespacestd;

intmain(){

intcnt=0;

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

if(i%3==0)cnt++;

}

cout<<cnt<<endl;

return0;

}第三部分程序完善题(共2题,每题14分,共28分)完善程序,补全空缺代码,使程序实现对应功能题目1:求1~n所有整数的平方和功能:输入正整数n,计算1²+2²+3²+…+n²的结果并输出。cpp

#include<iostream>

usingnamespacestd;

intmain(){

intn;

longlongsum=0;

cin>>n;

for(inti=1;___(1)___;i++){

sum+=___(2)___;

}

cout<<sum<<endl;

return0;

}空(1)、空(2)填写完整代码题目2:判断素数功能:输入一个大于1的整数,判断其是否为素数,是则输出YES,否则输出NO。cpp

#include<iostream>

usingnamespacestd;

intmain(){

intn;

cin>>n;

boolflag=true;

for(inti=2;i*i<=n;i++){

if(___(1)___){

flag=false;

___(2)___;

}

}

if(flag)cout<<"YES"<<endl;

elsecout<<"NO"<<endl;

return0;

}空(1)、空(2)填写完整代码第四部分编程大题(共4题,每题80分,共320分)题目1:整数求和(基础题)【题目描述】输入两个整数a、b,输出a到b之间所有整数的和(包含a和b,保证a≤b)。【输入格式】一行两个整数a、b【输出格式】一行一个整数,表示区间和【样例输入】110【样例输出】55【数据范围】-1000≤a≤b≤1000题目2:统计偶数个数(基础题)【题目描述】输入n个整数,统计其中偶数的数量。【输入格式】第一行一个整数n,表示数字个数;第二行n个整数【输出格式】一行一个整数,表示偶数数量【样例输入】512345【样例输出】2【数据范围】1≤n≤100,所有整数绝对值不超过1000题目3:最大公约数(中档题)【题目描述】输入两个正整数,求它们的最大公约数。【输入格式】一行两个正整数【输出格式】一行一个整数,表示最大公约数【样例输入】1218【样例输出】6【数据范围】1≤两个整数≤10000题目4:最长连续递增序列(提高题)【题目描述】给定n个整数组成的序列,找出其中最长的连续递增子序列的长度(严格递增)。【输入格式】第一行一个整数n,第二行n个整数【输出格式】一行一个整数,表示最长连续递增序列长度【样例输入】71324516【样例输出】3【解释】最长序列为2,4,5,长度为3【数据范围】1≤n≤1000完整答案与详细解析一、单项选择题答案及解析1.C解析:程序三大基本结构为顺序、分支、循环,递归是算法实现方式,不属于基础结构。2.B解析:1*32+1*16+0*8+1*4+0*2+1*1=53。3.C解析:32位编译环境下int固定占4字节,longlong占8字节。4.B解析:选择排序无论数据有序与否,都需要固定次数遍历比较,时间复杂度恒为O(n²);冒泡、插入排序有序时复杂度为O(n)。5.B解析:栈遵循先进后出规则,队列遵循先进先出。6.C解析:5%2=1,5/2=2(整数除法),1+2=3。7.D解析:A数组未指定长度;B初始化元素超出数组长度;C不支持变量定义数组长度;D剩余元素自动补0,合法。8.B解析:完全二叉树节点最紧凑、层数最少,1、2、4、3分布,共4层。9.A解析:if是分支语句,不属于循环语句。10.B解析:16+8+2=26,对应二进制11010。11.B解析:continue仅结束本次循环,break结束整个循环。12.C解析:排队系统遵循队列先进先出特性,其余为栈的应用。13.B解析:变量名不能以数字开头、不能含特殊符号、不能使用关键字。14.B解析:有序数组二分查找时间复杂度O(logn),远低于顺序查找O(n)。15.B解析:!false为true,true&&true结果为真,对应数值1。二、程序阅读题答案及解析程序1答案:12解析:循环遍历1~6,累加偶数2、4、6,总和=2+4+6=12。程序2答案:120解析:递归实现阶乘计算,f(5)=5*4*3*2*1=120。程序3答案:2010解析:通过加减法实现两数交换,最终a、b数值互换。程序4答案:3解析:1~10中3的倍数为3、6、9,共3个。三、程序完善题答案及解析题目1答案(1)i<=n(2)i*i解析:循环遍历1到n,每次累加当前数字的平方,使用longlong避免大数溢出。题目2答案(1)n%i==0(2)break解析:若存在能整除n的数,说明不是素数,标记状态并跳出循环,减少无效遍历。四、编程大题标准代码+详细解析题目1题解思路:遍历a到b所有数字累加,或使用等差数列求和公式,两种方法均可。cpp

#include<iostream>

usingnamespacestd;

intmain(){

inta,b,sum=0;

cin>>a>>b;

for(inti=a;i<=b;i++){

sum+=i;

}

cout<<sum<<endl;

return0;

}题目2题解思路:遍历所有输入数字,判断对2取余是否为0,统计符合条件的数量。cpp

#include<iostream>

usingnamespacestd;

intmain(){

intn,x,cnt=0;

cin>>n;

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

cin>>x;

if(x%2==0)cnt++;

}

cout<<cnt<<endl;

return0;

}题目3题解思路:使用欧几里得辗转相除法,高效求解最大公约数,适配大数范围。cpp

#include<iostream>

usingnamespacestd;

intgcd(inta,intb){

while(b!=0){

intt=a%b;

a=b;

b=t;

}

returna;

}

intmain(){

intx,y;

cin>>x>>y;

cout<<gcd(x,y)<<endl;

return0;

}题目4题解思路:设置临时长度记录当前递增序列长度,遍历数组,后数大于前数则临时长度+1,否则重置为1,全程更新最大值。cpp

#include<iostream>

#include<algorithm>

usingnamespacestd;

intmain(){

intn,a[1005];

cin>>n;

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

cin>>a[i];

}

intmaxlen=1,now=1;

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

if(a[i]>a[i-1]){

now++;

maxlen=

温馨提示

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

评论

0/150

提交评论