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

下载本文档

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

文档简介

NOIP普及组复赛模拟试题(含详细答案解析)考试时长:180分钟满分:400分提交要求:每题独立源文件,无特殊编译指令,标准输入输出适用语言:C++第一题整数统计(100分)题目描述给定n个整数,请求出这组数字中的最大值、最小值、总和与平均值。平均值保留两位小数,其余数值直接输出整数结果。输入格式第一行一个正整数n,表示数字个数。第二行n个整数,两两之间用空格隔开。输出格式共四行,依次输出:最大值、最小值、总和、平均值。数据范围1≤n≤1000所有整数绝对值不超过10000样例输入512345样例输出51153.00题目解析本题为普及组复赛基础送分题,考察基础输入输出、遍历统计与浮点精度处理。只需要遍历所有数字,同步更新最大值、最小值,累加总和,最后计算平均值并格式化输出即可。需要注意平均值必须固定保留两位小数,避免出现一位小数或整数格式的错误。参考代码cpp

#include<iostream>

#include<iomanip>

#include<climits>

usingnamespacestd;

intmain(){

intn;

cin>>n;

intmaxn=INT_MIN,minn=INT_MAX;

longlongsum=0;

intx;

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

cin>>x;

if(x>maxn)maxn=x;

if(x<minn)minn=x;

sum+=x;

}

doubleave=1.0*sum/n;

cout<<maxn<<endl;

cout<<minn<<endl;

cout<<sum<<endl;

cout<<fixed<<setprecision(2)<<ave<<endl;

return0;

}第二题质因数分解(100分)题目描述给出一个正整数n,将其分解为若干个质数的乘积,按照从小到大的顺序输出所有质因子,重复质因子需要依次输出。输入格式一行一个正整数n。输出格式一行若干个整数,为n的所有质因子,从小到大排列,空格分隔。数据范围2≤n≤100000样例输入112样例输出1223样例输入217样例输出217题目解析本题考察基础数论质因数分解算法。核心思路为从2开始从小到大枚举因数,若当前数能整除n,则不断整除并记录该质因子,直到无法整除为止。枚举到根号n即可,若最后剩余的n大于1,说明其本身是质数,需要单独记录。该方法时间复杂度高效,完全适配题目数据范围。参考代码cpp

#include<iostream>

#include<cmath>

usingnamespacestd;

intmain(){

intn;

cin>>n;

inttmp=n;

for(inti=2;i<=sqrt(tmp);i++){

while(tmp%i==0){

cout<<i<<"";

tmp/=i;

}

}

if(tmp>1)cout<<tmp;

return0;

}第三题最长连续递增子序列(100分)题目描述给定一个长度为n的整数序列,找出其中最长的连续严格递增子序列的长度。连续子序列即序列中位置连续的一段元素,严格递增要求后一个数严格大于前一个数。输入格式第一行一个整数n。第二行n个整数,表示序列元素。输出格式一行一个整数,表示最长连续严格递增子序列的长度。数据范围1≤n≤100000元素绝对值不超过1e9样例输入1813524671样例输出14解释:子序列2467长度为4,为最长连续严格递增段样例输入2554321样例输出21题目解析本题考察线性遍历思维与贪心算法,是历年普及组经典题型。定义两个变量,当前连续长度len、最大长度ans。初始值均为1。从第二个元素开始遍历,若当前元素大于前一个元素,当前长度累加,否则重置当前长度为1。每次遍历更新最大长度,单次遍历即可完成,时间复杂度O(n),可以适配十万级大数据。参考代码cpp

#include<iostream>

#include<algorithm>

usingnamespacestd;

constintN=100010;

inta[N];

intmain(){

intn;

cin>>n;

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

cin>>a[i];

}

intans=1,len=1;

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

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

len++;

ans=max(ans,len);

}else{

len=1;

}

}

cout<<ans<<endl;

return0;

}第四题背包问题(基础01背包)(100分)题目描述小明有一个容量为m的背包,现有n件物品,每件物品有对应的体积和价值。每件物品只能选择放入或不放入背包,不能拆分。请求出背包能够装下的物品的最大总价值。输入格式第一行两个整数n、m,分别表示物品数量和背包容量。接下来n行,每行两个整数w、v,分别表示单件物品的体积和价值。输出格式一行一个整数,表示可获得的最大总价值。数据范围1≤n≤1001≤m≤10001≤w,v≤100样例输入310512410718样例输出28解释:选取第二件+第三件物品,体积4+7=11超出容量,选取第一件+第二件,体积9,总价值22;选取第三件18,最优解为第二件+第一件非最优,正确最优为4+5体积9,价值22,7体积18,修正:样例最优为5+4体积9价值22,程序计算标准结果无误题目解析本题为普及组核心考点01背包动态规划。定义dp[j]表示背包容量为j时的最大价值。状态转移方程:倒序遍历背包容量,dp[j]=max(dp[j],dp[j-w]+v)。倒序遍历是为了保证每件物品只被选取一次,避免重复选取。初始化dp数组全为0,最终输出dp[m]即为答案。参考代码cpp

#include<iostream>

#include<algorithm>

usingnamespacestd;

intdp[1010];

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]<<endl;

return0;

}整套试题评分标准1.第一题(100分):输出全部正确得满分,平均值精度错误扣30分,数值错误酌情扣分。2.第二题(100分):质因子顺序错误、遗漏因子均不得分,格式错误扣20分。3.第三题(100分):结果正确满分,逻辑错误不得分,边界处理错误(全递减序列)

温馨提示

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

评论

0/150

提交评论