2018全国青少年信息学奥林匹克联赛初赛 普及组

第二十四届全国青少年信息学奥林匹克联赛初赛
普及组C+ +语言试题
竞赛时间:2018年10月13日14:30~16:30
选手注意:
●  试题纸共有7 页,答题纸共有2页,满分100分。请在答题纸上作答,写在试题纸上的一律无效。
●  不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。
一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)
1、以下哪一种设备属于输出设备:(D
A.扫描仪  B.键盘  C.鼠标  D.打印机
2、下列四个不同进制的数中,与其它三项数值上不相等的是(D)。
A.(269)16     B.(617)10    C.(1151)8     D.(1001101011)2
3、1MB等于(D)。
A.1000 字节    B.1024 字节    C.1000 x 1000字节    D.1024X 1024字节
4、广域网的英文缩写是(B)。
A.LAN    B.WAN    C.MAN    D.LNA
5、中国计算机学会于(B)年创办全国青少年计算机程序设计竞赛。
A.1983  B.1984  C.1985  D.1986
6、如果开始时计算机处于 小写输入状态,现在有一只小老鼠反复按照CapsLock、字母键A、字母键S、字母键D、字母键F的顺序循环按键,即CapsLock、A、S、D、F、CapsLock、A、S、D、F、.....屏幕上输出的第81个字符是字母(A)。
A.A     B.S     C.D     D.a
7、根节点深度为0,一棵深度为 h的满k(k>1)叉树,即除最后一层无任何子节点外,每一层上的所有结点都有k个子结点的树,共有(A)个结点。
A.(k^(h+1)-1)/(k-1)     B.k^(h-1)     C.k^h      D.(k^(h-1))/(k-1)
8、以下排序算法中,不需要进行关键字比较操作的算法是(A)。
A.基数排序       B.冒泡排序     C.堆排序      D.直接插入排序
9、给定一个含N个不相同数字的数组,在最坏情况下,找出其中最大或最小的数,至少需要N-1次比较操作。则最坏情况下,在该数组中同时找最大与最小的数至少需要(A)次比较操作。([]表示向上取整,||表示向下取整)
A.[3N/2]-2    B.|3N/2|-2    C.2N-2    D.2N-4
10、下面的故事与(B)算法有着异曲同工之妙。从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:“从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事...”
A.枚举     B.递归     C.贪心     D.分治
11、由四个没有区别的点构成的简单无向连通图的个数是(A)。
 A.6     B.7      C.8     D.9  
12、设含有10个元素的集合的全部子集数为S,其中由7个元素组成的子集数为T,则T/S的值为(B)。
A.5/32      B.15/128     C.1/8     D.21/128
13、10000以内,与10000互质的正整数有(B)个。
A.2000    B.4000    C.6000    D.8000
14、为统计一个非负整数的进制形式中1的个数,代码如下:int CountBit(int x){int ret = 0;while(x){ret++;        ;}return ret;}则空格内要填入的语句是(B)。
A.x>>= 1     B.x&=x-1        C.x| =x>> 1        D.x<<= 1
15、下图中所使用的数据结构是(B)。


A.哈希表   B.栈    C.队列    D.二叉树

二、问题求解(共2题,每题5分,共计10分)
1、甲乙两丁四人在考虑周末要不要外出郊游。已知①如果周末下雨,粗不去,则甲一定不去;②如果乙去,则丁一定去;③如果丙去,则丁一定不去;④如果丁不去,而且甲不去,则丙一定不去。如果周末丙去了,则甲      (去了/没去)(1分),乙         (去了/没去)(1分),丁         (去了/没去)(1分),周末          (下雨/没下雨)(2分)。
答案:去了|没去|没去|没下雨
2、从1到2018这2018个数中,共有     个包含数字8的数。包含数字8 的数是指有某一位是“8”的数,例如“2018"与“188"。
答案:544

三、阅读程序写结果(共4题,每题8分,共计32分)
1.

#include 
char st[100];
int main()
{
	scanf("%s",st);
	for(int i=0;st[i];++i){
		if('A'<= st[i]&&st[i]<='Z')
			st[i]+=1;
	}
	printf("%s\n",st);
	return 0;
}

//输入:QuanGuoLianSai
//输出:______________
//输出:RuanHuoMianTai

2.

#include 
int main()
{
	int x;
	scanf("%d",&x);
	int res=0;
	for(int i=0;i

3.

#include 
using namespace std;
int n,m;
int findans(int n,int m)
{
	if(n==0)return m;
	if(m==0)return n%3;
	return findans(n-1,m)-findans(n,m-1)+findans(n-1,m-1);
}
int main()
{
	cin>>n>>m;
	cout << findans(n,m)<< endl;
	return 0;
}

//输入:5 6
//输出:__
//输出:8

4.

#include 
int n,d[100];
bool v[100];
int main()
{
	scanf("%d",&n);
	for(int i=0;i

四、完善程序(共2题,每题14分,共计28分)
1.(最大公约数之和)下列程序想要求解整数n的所有约数两两之间最大公约数的和对10007求余后的值,试补全程序。(第一空2分,其余3分)
举例来说,4的所有约数是1,2,4。1和2的最大公约数为1;2和4的最大公约数为2;1和4的最大公约数为1。于是答案为1 +2+ 1=4。
要求getDivisor函数的复杂度为0(√n),gcd 函数的复杂度为0(log max(a,b))。

你可能感兴趣的:(NOI)