NOIP2016信息学奥赛普及组初赛C试题及答案解析较完美版 下载本文

范文范例 指导参考

NOIP2016第二十二届全国青少年信息学奥林匹克联赛 赛初

普及组 C++语言题试

竞赛时间: 2016 年 10 月 22 日 14:30 ~16:30

一、单项选择题(共

20 题,每题 1.5 分,共计 30 分;每题有且仅有一个正确选项)

( ) 。

.Word C.Excel D. Acrobat Reader

1.以下不是微软公司出品的软件是 A . Powerpoint B

2.如果 256 种颜色用二进制编码来表示,至少需要 ( ) 位。 A . 6 B .7 C .8 D .9 3.以下不属于无线通信技术的是

( ) 。

A .蓝牙B .WiFi C .GPRS D .以太网 4.以下不是 CPU生产厂商的是 ( ) 。 A.Intel B.AMD C.Microsoft D.IBM 5.以下不是存储设备的是 A .光盘

B .磁盘

( ) 。 C .固态硬盘

D .鼠标

字母键A、字母键S

81 个

6.如果开始时计算机处于小写输入状态,现在有一只小老鼠反CapsLock、 照按复字符是字母 ( ) 。

A . A B .S C .D D .a

7.二进制数 00101100 和 00010101 的和是 ( ) 。 A.00101000 B.01000001 C.01000100 D.00111000 8.与二进制小数 A . 0.8 B

0.1 相等的八进制数是 ( ) 。

.0.2 D

.0.1

.0.4 C

和字母键D的顺序循环按键,即CapsLock、A、 S、D、CapsLock、A、S、D、? ? ,屏幕上输出的第

9.以下是 32 位机器和 64 位机器的区别的是 ( ) 。 A.显示器不同B .硬盘大小不同 C.寻址空间不同D .输入法不同

10.以下关于字符串的判定语句中正确的是 A.字符串是一种特殊的线性表 C.字符串不可以用数组来表示 叉树中的结点(根结点的下标为 A.6 B 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 using namespace std; int main() { int k=4,n=0; while(n

学习资料整理

( )

B .串的长度必须大于零 D .空格字符组成的串就是空串

维数组元素存储该二

i ,则其左孩子位于下标2i ( )

a、c 均己赋值( c 大于 0)。

1,若某结点的下标为

11.一棵二叉树如右图所示,若采用顺序存储结构,即用一 处、右孩子位于下标(2i+1) 处),则图中所有结点的最大下标为

. 10 C .12 D .15

12.若有如下程序段,其中

s、a、b、c 均己定义为整型变量,且

( ) 。

范文范例 指导参考

conntinue; k--; )

cout<

程序运行后的输出结果是 ( ) 。 A .2,2 B

.2,3 C

.3,2 D

.3,3

, Xn>。如 果 L 中 存 在 xi(1

使 得

14. 给 定 含 有 n 个不 同的 数 的 数组 L=xi+1>...>xn

把 a-c 三行代码补全到算法中使得算法正确找到

L 的峰顶。

,,则称 L 是单峰的,并称 xi 是 L 的“峰顶” 。现在己知 L 是单峰的,请

正确的填空顺序是 ( ) 。 A.c,a,b B. c,b,a C.a,b,c D.b,a,c

15.设简单无向图 G有 16 条边且每个顶点的度数都是 A .10 B .12 C .8 D .16 16.有 7 个一模一样的苹果,放到 17.下图表示一个果园灌溉系统,有

3 个一样的盘子中,一共有 ( ) 种放法。

A、B、C、D 四个阀门,每个阀门可以打开或关上,所有管道粗细相

( ) 。

A .7 B .8 C .21 D .37

同,以下设置阀门的方法中,可以让果树浇上水的是

2,则图 G有( ) 个顶点。

A.B 打开,其他都关上 C.A 打开,其他都关上

B .AB都打开, CD都关上 D .D打开,其他都关上

A向他

18.Lucia 和她的朋友以及朋友的朋友都在某社交网站上注册了账号。下图是他们之间的关系图,两个人 之间有边相连代表这两个人是朋友,没有边相连代表不是朋友。这个社交网站的规则是:如果某人 (她)的朋友 B 分享了某张照片,那么

B就可以对该照片进行评论;如果

的所有朋友都可以看见这个评论以及被评论的照片,但是不能对该照片进行评论(除非 享了该照片) 。现在 Lucia 已经上传了一张照片,但是她不想让 朋友( ) 分享该照片。

B 评论了该照片,那么他(她)

A也向他(她)分

Jacob 看见这张照片,那么她可以向以下

学习资料整理

范文范例 指导参考

A.Dana, Michael, Eve B.Dana, Eve, Monica C.Michael, Eve, Jacob D.Micheal, Peter, Monica

19.周末小明和爸爸妈妈三个人一起想动手做三道菜。小明负责洗菜、爸爸负责切菜、妈妈负责炒菜。假 设做每道菜的顺序都是:先洗菜

10 分钟,然后切菜 10 分钟,最后炒菜 10 分钟。那么做一道菜需要

( ) 分钟。

( ) 。

5 分,没有部分分;第二题第一空

2 30 分

钟。注意:两道不同的菜的相同步骤不可以同时进行。例如第一道菜和第二道的菜不能同时洗,也不能同 时切。那么做完三道菜的最短时间需要 A .90 B .60 C .50 D .40 20.参加 NOI比赛,以下不能带入考场的是 A.钢笔

B .适量的衣服 C .U盘 D .铅笔

二、问题求解(共 2 题,每题 5 分,共计 10 分;第一题全部答对得 分,第二空 3 分)

1.从一个 4× 4 的棋盘(不可旋转)中选取不在同一行也不在同一列上的两个方格,共有 2.约定二叉树的根节点高度为 三、阅读程序写结果(共 1.#include using namespace std; int main() {

int max, min, sum, count=0; int tmp; cin>>tmp;

if (tmp==0) return 0; max=min=sum=tmp; count++; while (tmp!=0) {

cin>>tmp; if (tmp!=0) {

sum+=tmp; count++;

if (tmp>max) max=tmp; if (tmp

cout<

学习资料整理

_______种方法。

1。一棵结点数为 2016 的二叉树最少有 ________ 个叶子结点;一棵结点数

为 2016 的二叉树最小的高度值是 ___________。

4 题,每题 8 分,共计 32 分)

范文范例 指导参考

}

输入: 1 2 3 4 5 6 0 7 2.#include using namespace std; int main() {

int i=100,x=0,y=0; while (i>0)

{

i--; x=i%8; if (x==1) y++; }

cout<

3. #include using namespace std; int main() {

int a[6]={1,2,3,4,5,6};

int pi=0; int pj=5; int t,i; while (pi

{ t=a[pi]; a[pi]=a[pj]; a[pj]=t; pi++; pj--; }

for (i=0;i<6;i++) cout<

4. #include using namespace std; int main() {

int i,length1, length2; string s1,s2;

s1=\

学习资料整理

输出:

范文范例 指导参考

s2=\length1=s1.size(); length2=s2.size(); for (i=0;i='a'&&s1[i]<='z') s1[i]-='a'-'A'; for (i=0;i='a'&&s2[i]<='z') s2[i]-='a'-'A';

if (s1==s2) cout<<\else if (s1>s2) cout <<\else cout<<\return 0; }

输出: _________

四、完善程序( 共 2 题,每题 14 分,共计 28 分) 1. (读入整数)请完善下面的程序,使得程序能够读入两个 int 范围内的整数,并将这两个整数分别输出,每行一个。 (第一、五空 2.5 分,其余 3 分) 输入的整数之间和前后只会出现空格或者回车。 输入数据保证合法。

例如:

输入: 123 -789 输出: 123

-789

#include using namespace std; int readint() {

int num = 0; // 存储读取到的整数

int negative = 0; // 负数标识

char c; // 存储当前读取到的字符

c = cin.get();

while ((c < '0' || c > '9') && c != '-') c = (1) ;

if (c == '-') negative = 1; else

(2) ;

c=cin.get(); while ( (3) )

{ (4) ; c=cin.get(); }

if (negative == 1) (5) ;

return num; } int main() {

学习资料整理

范文范例 指导参考

int a, b; a = readint(); b = readint();

cout<

2.( 郊游活动 ) 有 n 名同学参加学校组织的郊游活动,已知学校给这n 名同学的郊游总经费为 同时第 i 位同学自己携带了 辆自行车的价 为格

Mi 元。为了方便郊游,活动地点提供

A 元,与此

j

B( ≥ n) 辆自行车供人租用,租用第

Cj 元,每位同学可以使用自己携带的钱或者学校的郊游经费,为了方便账务管理,每

位同学只能为自己租用自行车,且不会借钱给他人,他们想知道最多有多少位同学能够租用到自行车。 ( 第四、五空 2.5 分,其余 3 分) 本题采用二分法。对于区间[l, r] , 我们取中间点 的过程是利用贪心算法实现的。 #include using namespace std; #define MAXN 1000000

int n, B, A, M[MAXN], C[MAXN], l, r, ans, mid; bool check(int nn) {

int count = 0, i, j; i = (1) ; j = 1; while (i <= n)

{ if ( (2) )

count += C[j] - M[i]; i++; j++; } return (3) ;

}

void sort(int a[], int l, int r) {

int i = l, j = r, x = a[(l + r) / 2], y; while (i <= j)

{

while (a[i] < x) i++; while (a[j] > x) j--; if (i <= j)

{

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);

学习资料整理

mid 并判断租用到自行车的人数能否达到 mid 。判断

范文范例 指导参考

} int main() { int i;

cin >> n >> B >> A; for (i = 1; i <= n; i++) cin >> M[i]; for (i = 1; i <= B; i++) cin >> 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) ; }

cout << ans << endl; return 0; }

学习资料整理

范文范例 指导参考

第二十二届全国青少年信息学奥林匹克联赛初赛

普及组参考答案

一.选择题

DCDCD CBBCA DBDAD BAACC 二.问题求解 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&&c<=57 (4) num=num*10+c-'0' (5) num=-num 2. (1) n-nn+1 (2) M[i]

或 M[i]<=C[j]

或 num=num*10+c-48

或 return-num

学习资料整理