NOIP普及组 C语言模拟试题(含详细答案解析)_第1页
NOIP普及组 C语言模拟试题(含详细答案解析)_第2页
NOIP普及组 C语言模拟试题(含详细答案解析)_第3页
NOIP普及组 C语言模拟试题(含详细答案解析)_第4页
NOIP普及组 C语言模拟试题(含详细答案解析)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

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

文档简介

NOIP普及组C语言模拟试题(含详细答案解析)考试时长:180分钟满分:400分答题说明:1.本次试题共四道编程题,每题100分,总分400分;2.程序需使用标准C语言编写,兼容NOIP官方评测环境;3.所有题目需读写标准输入输出,禁止使用文件读写、特殊库函数;4.代码需保证正确性、完整性,能够通过所有测试样例。第一题整数求和(100分)题目描述给定两个整数a和b,计算并输出这两个整数的和。输入格式一行两个整数a、b,中间用空格隔开。输出格式一行一个整数,表示a+b的计算结果。数据范围-10000≤a,b≤10000样例输入123456样例输出579解题思路本题为普及组基础入门题,主要考察标准输入输出、整数变量定义与基础加法运算。只需定义两个整型变量,读取输入数据,计算求和后直接输出结果即可,无需复杂逻辑判断。参考代码c

#include<stdio.h>

intmain()

{

inta,b;

scanf("%d%d",&a,&b);

printf("%d\n",a+b);

return0;

}答案解析1.头文件stdio.h用于支持scanf、printf输入输出函数;2.定义int类型变量a、b,适配题目给定的数据范围;3.scanf读取两个整数,自动忽略空格、换行等间隔符;4.直接计算a+b并打印结果,末尾换行符合输出格式要求。第二题偶数统计(100分)题目描述给定n个正整数,统计其中偶数的个数。输入格式第一行一个整数n,表示数字的个数;第二行n个正整数,两两之间用空格隔开。输出格式一行一个整数,表示输入数据中偶数的数量。数据范围1≤n≤1000,1≤所有数字≤10000样例输入523678样例输出3解题思路本题考察循环结构、条件判断与取模运算。偶数的判定规则为:数字对2取模结果为0。首先读取数字个数n,通过循环逐个读取数字,每遇到一个偶数就将计数器加1,循环结束后输出计数器的值即可。参考代码c

#include<stdio.h>

intmain()

{

intn,x,cnt=0;

scanf("%d",&n);

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

{

scanf("%d",&x);

if(x%2==0)

{

cnt++;

}

}

printf("%d\n",cnt);

return0;

}答案解析1.初始化计数器cnt=0,用于记录偶数个数;2.循环n次遍历所有输入数字,逐个判断奇偶性;3.x%2==0为偶数判定核心条件,满足则计数器自增;4.遍历完成后输出计数器,即为最终偶数总数。第三题最大最小值差值(100分)题目描述给定n个整数,找出这组数据中的最大值和最小值,计算并输出最大值与最小值的差值。输入格式第一行一个整数n;第二行n个整数,两两空格分隔。输出格式一行一个整数,输出最大值-最小值的结果。数据范围2≤n≤500,-10000≤所有数字≤10000样例输入6519-273样例输出11解题思路本题考察最值查找算法与循环遍历。首先读取第一个数字,将其同时初始化为最大值和最小值,后续逐个遍历剩余数字,不断更新最大值和最小值。遍历结束后,用最大值减去最小值得到差值并输出。该方法时间复杂度为O(n),适配题目数据范围。参考代码c

#include<stdio.h>

intmain()

{

intn,x;

intmaxn,minn;

scanf("%d",&n);

//读取第一个数,初始化最值

scanf("%d",&x);

maxn=x;

minn=x;

//遍历剩余n-1个数

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

{

scanf("%d",&x);

if(x>maxn)maxn=x;

if(x<minn)minn=x;

}

printf("%d\n",maxn-minn);

return0;

}答案解析1.先读取第一个数字初始化最大、最小值,避免初始值0带来的错误;2.后续每个数字分别与最值对比,更新最大值和最小值;3.最终计算最值差值,样例中最大值为9,最小值为-2,9-(-2)=11,与样例输出一致;4.代码兼容负数数据,完全覆盖题目数据范围。第四题阶乘末尾零的个数(100分)题目描述给定一个正整数n,计算n!(n的阶乘)末尾有多少个连续的0。阶乘定义:n!=1×2×3×...×n,规定0!=1,1!=1。输入格式一行一个正整数n。输出格式一行一个整数,表示n!末尾连续0的个数。数据范围1≤n≤100000样例输入110样例输出12样例输入225样例输出26解题思路本题为普及组经典数学题,核心知识点:阶乘末尾的0由因子2×5产生。在连续自然数相乘中,因子2的数量远多于因子5的数量,因此末尾0的个数等价于n!中因子5的总个数。计算方法:不断将n除以5,累加每次的商,直到n为0。该方法可统计出所有5、25、125等5的倍数贡献的因子5数量。参考代码c

#include<stdio.h>

intmain()

{

intn,ans=0;

scanf("%d",&n);

while(n>0)

{

n=n/5;

ans+=n;

}

printf("%d\n",ans);

return0;

}答案解析1.样例1:n=10,10/5=2,2/5=0,累加结果为2,对应末尾2个0;2.样例2:n=25,25/5=5,5/5=1,1/5=0,累加5+1=6,对应末尾6个0;3.算法优势:无需计算超大的阶乘数值,避免溢出问题,时间复杂度极低,可适配1e5的数据范围;4.核心原理:25包含两个因子5,125包含三个因子5,循

温馨提示

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

评论

0/150

提交评论