NOIP初赛普及组C++题目及答案Word文档下载推荐.docx
《NOIP初赛普及组C++题目及答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《NOIP初赛普及组C++题目及答案Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
光盘
磁盘
固态硬盘
6.如果开始时计算机处于小写输入状态,现在有一只小老鼠反复按照CapsLock、字母键A、字母键S和字母键D的顺序循环按键,即CapsLock、A、S、D、
CapsLock、A、S、D、……,屏幕上输出的第81个字符是字母(
A
B.S
D
a
7.
二进制数00101100和00010101的和是(
00101000
B.01000001
01000100
00111000
8.
与二进制小数0.1相等的八进制数是(
0.1
0.8
B.0.4
0.2
CCFNOIP2016初赛普及组C++语言试题第1页,共9页
9.
以下是32位机器和64位机器的区别的是(
显示器不同
硬盘大小不同
寻址空间不同
输入法不同
10.
以下关于字符串的判定语句中正确的是(
字符串是一种特殊的线性表
串的长度必须大于零
字符串不可以用数组来表示
空格字符组成的串就是空串
11.一棵二叉树如右图所示,若采用顺序存储结构,即用一维数组元素存储该二叉树中的结点(根结点的下标为1,若某结点的下标为i,则其左孩子位于下标2i处、右孩子位于下标(2i+1)处),则图中所有结点的最大下标为
()。
A.6B.10C.12D.15
12.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)。
s=a;
for(b=1;
b<
=c;
b++)s=s+1;
则与上述程序段修改s值的功能等价的赋值语句是()。
A.s=a+b;
B.s=a+c;
C.s=s+c;
D.s=b+c;
13.有以下程序:
#include<
iostream>
usingnamespacestd;
intmain(){
intk=4,n=0;
while(n<
k){
n++;
if(n%3!
=0)
continue;
k--;
}
cout<
<
k<
"
"
<
n<
endl;
return0;
程序运行后的输出结果是()。
A.2,2B.2,3C.3,2D.3,3
14.给定含有n个不同的数的数组L=<
x1,x2,...,xn>
。
如果L中存在x(i1<
i<
n)使得x1<
x2<
...<
xi-1<
xi>
xi+1>
...>
xn,则称L是单峰的,并称xi是L的
CCFNOIP2016初赛普及组C++语言试题第2页,共9页
“峰顶”。
现在已知L是单峰的,请把a-c三行代码补全到算法中使得算法正确找到L的峰顶。
a.Search(k+1,n)
b.Search(1,k-1)
c.returnL[k]
Search(1,n)
1.k<
-[n/2]
2.ifL[k]>
L[k-1]andL[k]>
L[k+1]
3.then__________
4.elseifL[k]>
L[k-1]andL[k]<
5.then__________
6.else__________
正确的填空顺序是()。
c,a,b
c,b,a
a,b,c
b,a,c
15.
设简单无向图G有16条边且每个顶点的度数都是2,则图G有(
)个顶
点。
10
12
16
16.
有7个一模一样的苹果,放到3个一样的盘子中,一共有(
)种放法。
7
21
37
17.下图表示一个果园灌溉系统,有A、B、C、D四个阀门,每个阀门可以打开或关上,所有管道粗细相同,以下设置阀门的方法中,可以让果树浇上水的
有水
果树
是(
B打开,其他都关上
AB都打开,CD都关上
A打开,其他都关上
D打开,其他都关上
CCFNOIP2016初赛普及组C++语言试题第3页,共9页
18.Lucia和她的朋友以及朋友的朋友都在某社交网站上注册了账号。
下图是他们之间的关系图,两个人之间有边相连代表这两个人是朋友,没有边相连代表不是朋友。
这个社交网站的规则是:
如果某人A向他(她)的朋友B分享了某张照片,那么B就可以对该照片进行评论;
如果B评论了该照片,那么他(她)的所有朋友都可以看见这个评论以及被评论的照片,但是不能对该照片进行评论(除非A也向他(她)分享了该照片)。
现在Lucia已经上传了一张照片,但是她不想让Jacob看见这张照片,那么她可以向以下朋友
()分享该照片。
Dana,Michael,Eve
Dana,Eve,Monica
Michael,Eve,Jacob
Micheal,Peter,Monica
19.周末小明和爸爸妈妈三个人一起想动手做三道菜。
小明负责洗菜、爸爸负责切菜、妈妈负责炒菜。
假设做每道菜的顺序都是:
先洗菜10分钟,然后切菜10分钟,最后炒菜10分钟。
那么做一道菜需要30分钟。
注意:
两道不同的菜的相同步骤不可以同时进行。
例如第一道菜和第二道的菜不能同时洗,也不能同时切。
那么做完三道菜的最短时间需要()分钟。
90
60
50
40
20.
参加NOI比赛,以下不能带入考场的是(
钢笔
适量的衣服
U盘
铅笔
二、问题求解(共2题,每题5分,共计10分;
第一题全部答对得5分,没有部分分;
第二题第一空2分,第二空3分)
1.从一个4×
4的棋盘(不可旋转)中选取不在同一行也不在同一列上的两个方格,共有_________种方法。
CCFNOIP2016初赛普及组C++语言试题第4页,共9页
2.约定二叉树的根节点高度为1。
一棵结点数为2016的二叉树最少有
_________个叶子结点;
一棵结点数为2016的二叉树最小的高度值是
_________。
三、阅读程序写结果(共4题,每题8分,共计32分)
1.#include<
usingnamespacestd;
intmain(){
intmax,min,sum,count=0;
inttmp;
cin>
>
tmp;
if(tmp==0)
max=min=sum=tmp;
count++;
while(tmp!
=0){cin>
if(tmp!
=0){
sum+=tmp;
count++;
if(tmp>
max)
max=tmp;
if(tmp<
min)
min=tmp;
max<
min<
sum/count<
return0;
输入:
12345607输出:
_________
2.#include<
CCFNOIP2016初赛普及组C++语言试题第5页,共9页
inti=100,x=0,y=0;
while(i>
0){
i--;
x=i%8;
if(x==1)y++;
y<
输出:
3.#include<
inta[6]={1,2,3,4,5,6};
intpi=0;
intpj=5;
intt,i;
while(pi<
pj){t=a[pi];
a[pi]=a[pj];
a[pj]=t;
pi++;
pj--;
for(i=0;
6;
i++)cout<
a[i]<
;
4.#include<
inti,length1,length2;
strings1,s2;
s1="
Ihaveadream."
CCFNOIP2016初赛普及组C++语言试题第6页,共9页
s2="
IHaveADream."
length1=s1.size();
length2=s2.size();
length1;
i++)
if(s1[i]>
='
a'
&
&
s1[i]<
z'
)s1[i]-='
-'
A'
length2;
if(s2[i]>
s2[i]<
)s2[i]-='
if(s1==s2)
="
elseif(s1>
s2)
"
else
四、完善程序(共2题,每题14分,共计28分)
1.(读入整数)请完善下面的程序,使得程序能够读入两个int范围内的整数,并将这两个整数分别输出,每行一个。
(第一、五空2.5分,其余3分)
输入的整数之间和前后只会出现空格或者回车。
输入数据保证合法。
例如:
输入:
123-789
123
-789
intreadint(){
intnum=0;
//存储读取到的整数
intnegative=0;
//负数标识
charc;
//存储当前读取到的字符
c=cin.get();
while((c<
'
0'
||c>
9'
)&
c!
-'
)c=
(1);
CCFNOIP2016初赛普及组C++语言试题第7页,共9页
if(c=='
)negative=1;
else
(2)
while(
(3)
){
(4);
if(negative==1)
(5);
returnnum;
intmain(){inta,b;
a=readint();
b=readint();
a<
endl<
2.(郊游活动)有n名同学参加学校组织的郊游活动,已知学校给这n名同学的郊游总经费为A元,与此同时第i位同学自己携带了Mi元。
为了方便郊游,活动地点提供B(≥n)辆自行车供人租用,租用第j辆自行车的价格为Cj元,每位同学可以使用自己携带的钱或者学校的郊游经费,为了方便账务管理,每位同学只能为自己租用自行车,且不会借钱给他人,他们想知道最多有多少位同学能够租用到自行车。
(第四、五空2.5分,其余3分)
本题采用二分法。
对于区间[l,r],我们取中间点mid并判断租用到自行车的人数能否达到mid。
判断的过程是利用贪心算法实现的。
#defineMAXN1000000
intn,B,A,M[MAXN],C[MAXN],l,r,ans,mid;
boolcheck(intnn){intcount=0,i,j;
i
=
(1)
j
1;
while(i<
=n){
if(
)
CCFNOIP2016初赛普及组C++语言试题第8页,共9页
count+=C[j]-M[i];
i++;
j++;
return
voidsort(inta[],intl,intr){
inti=l,j=r,x=a[(l+r)/2],y;
while(i<
=j){
while(a[i]<
x)i++;
while(a[j]>
x)j--;
if(i<
y=a[i];
a[i]=a[j];
a[j]=y;
i++;
j--;
if(i<
r)sort(a,i,r);
if(l<
j)sort(a,l,j);
intmain(){inti;
n>
B>
A;
for(i=1;
=n;
i++)cin>
M[i];
=B;
C[i];
sort(M,1,n);
sort(C,1,B);
l=0;
r=n;
while(l<
=r){
mid=(l+r)/2;
if((4)){
ans=mid;
l=mid+1;
}else
r=(5);
ans<
CCFNOIP2016初赛普及组C++语言试题第9页,共9页
普及组参考答案
一.选择题
DCDCDCBBCADBDADBAACC
二.问题求解
1.72
2.1(2分)11(3分)
三.阅读程序写结果
1.6,1,3
2.13
3.6,5,4,3,2,1,
4.=
四.完善程序
1.
(1)cin.get()
(2)num=c-‘0’或num=c-48
(3)c>
=’0’&
c<
=’9’或c>
=48&
=57
(4)num=num*10+c-'
或
num=num*10+c-48
(5)num=-num
或
return-num
(1)n-nn+1
(2)M[i]<
C[j]
M[i]<
=C[j]
(3)count<
=A
(4)check(mid)
(5)mid-1