1、NOIP2016第二十二届全国青少年信息学奥林匹克联赛 初 赛 普及组C+语言试题 竞赛时间: 2016 年 10 月 22 日 14:3016:30 一、单项选择题(共20 题,每题1.5 分,共计30 分;每题有且仅有一个正确选项) 1以下不是微软公司出品的软件是()。 APowerpointBWordC.ExcelD.Acrobat Reader 2如果 256 种颜色用二进制编码来表示,至少需要()位。 A6B7C8D 9 3以下不属于无线通信技术的是()。 A蓝牙BWiFiCGPRSD以太网 4以下不是CPU 生产厂商的是 ()。 A.IntelB.AMDC.MicrosoftD.I
2、BM 5以下不是存储设备的是()。 A光盘B磁盘C固态硬盘D鼠标 6如果开始时计 算 机 处于小写输入状态,现在有一只小老鼠反复按照CapsLock、字母键A、字母键S 和字母键D 的顺序循环按键,即CapsLock、A、 S、D、CapsLock、 A、S、D、,屏幕上输出的第81 个 字符是字母 ()。 AABSCDDa 7二进制数00101100 和 00010101 的和是 ()。 A.00101000B.01000001C.01000100D.00111000 8与二进制小数0.1 相等的八进制数是()。 A0.8B0.4C0.2D0.1 9以下是32 位机器和 64 位机器的区别的
3、是()。 A显示器不同B硬盘大小不同 C寻址空间不同D输入法不同 10以下关于字符串的判定语句中正确的是() A字符串是一种特殊的线性表B串的长度必须大于零 C字符串不可以用数组来表示D空格字符组成的串就是空串 11一棵二叉树如右图所示,若采用顺序存储结 构 , 即 用 一 维数组元素存储该二 叉树中的结点 (根结点的下标为 1,若某结点的下标为 i,则其左孩子位于下标2i 处、 右孩子位于下标(2i+1)处) , 则图 中 所 有 结点的最大下标为 ()。 A.6B10C 12D15 12若有如下程序段,其中s、a、b、c 均己定义为 整 型 变量,且a、c 均己赋值(c 大于 0) 。 s
4、=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(nk) n+; if (n%3!=0) 1 / 8 conntinue; k-; ) coutk , nendl; return O; ) 程序运行后的输出结果是()。 A2,2B2,3C3,2D3,3 14. 给 定 含 有n 个 不 同 的 数 的 数 组L=。 如 果L 中 存
5、 在xi(1in) 使 得 x1x2.xi-1xi+1.xn,则称 L 是单峰的,并称xi 是 L 的“峰顶”。现在己知L是单峰的,请把a-c 三行代码补全到算法中使得算法正确找到L的峰顶。 正确的填空顺序是()。 A.c,a,bB.c,b,aC.a,b,cD.b,a,c 15设简单无向图G有 16 条边且每个顶点的度数都是2,则图 G有 ()个顶点。 A10B12C8D16 16有 7 个一模一样的苹果,放到3 个一样的盘子中,一共有()种放法。 A7B8C21D37 17下图表示一个果园灌溉系统,有A、B、C、D 四个阀门,每个阀门可以打开或关上,所有管道粗细相 同,以下设置阀门的方法中,
6、可以让果树浇上水的是()。 A B 打开,其他都关上B AB 都打开, CD 都关上 CA打开,其他都关上DD打开,其他都关上 18Lucia和她的朋友以及朋友的朋友都在某社交网站上注册了账号。下图是他们之间的关系图,两个人之 间有边相连代表这两个人是朋友,没有边相连代表不是朋友。这个社交网站的规则是:如果某人A向他(她) 的朋友 B分享了某张照片,那么B就可以对该照片进行评论;如果B评论了该照片,那么他(她)的所有 朋友都可以看见这个评论以及被评论的照片,但是不能对该照片进行评论(除非A也向他(她)分享了该 照片)。现在 Lucia 已经上传了一张照片,但是她不想让Jacob 看见这张照片,
7、那么她可以向以下朋友() 分享该照片。 2 / 8 A.Dana, Michael,EveB.Dana, Eve,Monica C.Michael,Eve,JacobD.Micheal, Peter,Monica 19周末小明和爸爸妈妈三个人一起想动手做三道菜。小明负责洗菜、爸爸负责切菜、妈妈负责炒菜。假 设做每道菜的顺序都是:先洗菜10 分钟,然后切菜10 分钟,最后炒菜10 分钟。那么做一道菜需要30 分 钟。注意:两道不同的菜的相同步骤不可以同时进行。例如第一道菜和第二道的菜不能同时洗,也不能同 时切。那么做完三道菜的最短时间需要()分钟。 A90B60C50D40 20参加 NOI比赛
8、,以下不能带入考场的是()。 A钢笔B适量的衣服CU 盘D铅笔 二、问题求解(共2 题,每题5 分,共计10 分;第一题全部答对得5 分,没有部分分;第二题第一空2 分,第二空3 分) 1从一个4 4 的棋盘(不可旋转)中选取不在同一行也不在同一列上的两个方格,共有_种方法。 2约定二叉树的根节点高度为1。一棵结点数为2016 的二叉树最少有_个叶子结点; 一棵结点数 为 2016 的二叉树最小的高度值是_。 三、阅读程序写结果(共4题,每题 8 分,共计32分) 1.#include using namespace std; int main() int max,min,sum, count
9、=0; int tmp; cintmp; if(tmp=0) return0; max=min=sum=tmp; count+; while (tmp!=0) cintmp; if (tmp!=0) sum+=tmp; count+; if (tmpmax)max=tmp; if (tmpmin)min=tmp; coutmax,min,sum/countendl; return0; 3 / 8 输入: 12 34 560 7输出: 2.#include using namespace std; int main() int i=100,x=0,y=0; while (i0) i-; x=i%
10、8; if(x=1)y+; coutyendl; return0; 输出: 3.#include using namespace std; int main() int a6=1,2,3,4,5,6; int pi=0; int pj=5; int t,i; while (pipj) t=api; api=apj; apj=t; pi+; pj-; for (i=0;i6;i+) coutai,; coutendl; return 0; 输出: 4.#include using namespace std; int main() int i,length1, length2; string s
11、1,s2; s1=I have adream.; 4 / 8 s2=I HaveA Dream.; length1=s1.size(); length2=s2.size(); for(i=0;i=a for(i=0;i=a if(s1=s2) cout=s2) cout endl; elsecoutendl; return0; 输出:_ 四、完善程序(共 2 题,每题14 分,共计28 分) 1.(读入整数) 请完善下面的程序,使得程序能够读入两个int 范围内的整数,并将这两个整数分别输出, 每行一个。(第一、五空2.5 分,其余3 分) 输入的整数之间和前后只会出现空格或者回车。输入数据保
12、证合法。 例如: 输入: 123-789 输出: 123 -789 #include using namespace std; int readint() int num = 0; /存储读取到的整数 int negative = 0; /负数标识 char c;/存储当前读取到的字符 c = cin.get(); while (c 9) if (c= -) negative = 1; else(2) ; c=cin.get(); while ( (3) ) (4) ; c=cin.get(); if (negative =1)(5) ; return num; int main() 5 /
13、8 int a, b; a =readint(); b =readint(); coutaendlbendl; return 0; 2.( 郊游活动)有 n 名同学参加学校组织 的 郊 游 活 动,已知学校给这n 名同学的郊游总经费为 A 元,与此 同时第i 位同学自己携带了Mi 元。为了方便郊游, 活动地点提供B( n)辆自行车供人租用,租用第j 辆 自行车的价格为Cj 元,每位同学可以使用自己携带的钱或者学校的郊游经费,为了方便账务 管 理 , 每 位 同学只能为自己租用自行车,且不会借钱给 他 人 ,他们想知道最多有多少位同学能够租用到自行车。( 第 四、五空2.5 分,其余3 分) 本
14、题采用二分法。对于区间l,r , 我们取中间点mid 并判断租用到自行车的人数能否达到mid。判断的 过 程 是 利 用 贪心算法实现 的 。 #include using namespace std; #define MAXN 1000000 int n, B,A, MMAXN, CMAXN,l, r,ans, mid; bool check(intnn) int count = 0,i, j; i = (1) ; j = 1; while (i = n) if ( (2) ) count += Cj - Mi; i+; j+; return(3) ; voidsort(int a, int
15、 l,int r) int i = l,j = r,x = a(l +r) / 2, y; while (i = j) while (ai x)j-; if (i = j) y= ai; ai= aj; aj = y; i+;j-; if(i r) sort(a, i,r); if(l n B A; for (i= 1; i Mi; for (i= 1; i Ci; 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 = 0&c=48&c=57 (4) num=num*10+c-0或num=num*10+c-48 (5) num=-num或return-num 2. (1) n-nn+1 (2) MiCj或Mi=Cj (3) count=A (4) check(mid) (5) mid-1 8 / 8