注:这套题是我初赛集训班的模拟题,洛谷上可能搜不着一模一样的原题。切勿当真
注:有的题一道题有两个答案,红色为错解,绿色为正解,是我在做这套题时的错题(以前的那四套题课上也做过,只不过当时没想到可以写错题分析,这套题解算是最完整的)
此次得分:69.5
1.【 单选 】2 分
在CPU的组成中,不包括(A B)
- A.运算器
- B.存储器
- C.控制器
- D.寄存器
错解:A
正解:B
错因分析:知识点掌握不熟,或做题太粗心本来这是个傻瓜题,但是做题时可能把CPU与内存搞混(我也不知道具体做错是什么原因)
正解题解:CPU由运算器、寄存器和控制器组成
知识点总结:
(1)CPU由运算器、寄存器和控制器组成
(2)计算机系统的硬件系统的组成:运算器、控制器(前二者包含在CPU里)、存储器、输入设备和输出设备
2.【 单选 】2 分
若X的补码是01101010,则X的原码是(D)
- A.10010101
- B.101110110
- C.00010110
- D.01101010
题解:x的最高位是0,也就说明x是个正数。正数的原码、反码、补码完全相同,所以不用再转换计算,直接选D
知识点总结:
(1)一个二进制数的最高位如果是0,则这个数是正数;最高位如果是1,则这个数是负数
(2)正数的原反补相同。负数的反码是原码除符号位外按位取反,负数的补码是在反码的基础上末尾加1
3.【 单选 】2 分
在下列几种存储器中,CPU不能直接访问的是(C A)
- A.硬盘
- B.缓存
- C.只读存储器
- D.随机存取存储器
错解:C
正解:A
错因分析:计算机基础知识较为薄弱,需多加巩固,强化记忆。这也是个傻瓜题
正解题解:硬盘中的数据要先调入到内存中才可被CPU访问
知识点总结:
(1)题干
(2)硬盘中的数据要先调入到内存中才可被CPU访问,CPU可以直接访问内存
4.【 单选 】2 分
假设a和b是两个100以内的int型变量,则下列代码中不能交换a和b的值的是(D)
- A.int t=a; a=b; b=t;
- B.a=a–b; b=b+a; a=b–a;
- C.a=a^b; b=a^b; a=a^b;
- D.a=a&b; b=a&b; a=a&b;
题解:A选项是用第三个变量来实现交换的(最最基础);
B选项:a-b
b+(a-b) = b+a-b = a
b+(a-b)-(a-b) = b+a-b-a+b = b
C选项:a^b
a^b^b = a
a^b^(a^b^b) = a^b^a^b^b = a^b^a =b
综上,只有D是错误的
知识点总结:
(1)题干
(2)一个数异或全1等于这个数按位取反,再异或全1又等于这个数本身;一个数异或全0等于它本身
(3)一个数按位与另一个数结果一定比这个数小
5.【 单选 】2 分
下列几种排序方法不属于稳定排序的是(D)
- A.归并排序
- B.冒泡排序
- C.插入排序
- D.堆排序
题解:傻瓜题,不讲了
知识点总结:
(1)快速排序、选择排序、堆排序和希尔排序是不稳定排序
(2)归并排序、冒泡排序和插入排序属于稳定排序
6.【 单选 】2 分
在非空的线性链表中由p所指向的结点后面插入一个q指向的结点,所需要的过程依次是
(D B)
- A.q->next=p ;p->next=q;
- B.q->next=p–>next; p->next=q;
- C.q->next=p->next; p=q;
- D.p->next=q;q->next=p;
错解:D
正解:B
错因分析:就是没记牢啊,必须恶补
正解题解:先修改q的指针域,让它指向p的下一个结点,然后修改p的指针域,让它指向q
知识点总结:题干就是
7.【 单选 】2 分
如图,一个地区分为5个行政区域,现给地图着色,要求相邻区域不得使用同一颜色,现有4种颜色可供选择,则不同的着色方法共有(D C)种
- A.24
- B.48
- C.72
- D.96
错解:D
正解:C
错因分析:以前备考小升初那些烦死个人的考试,奥数课上就讲过(唉,现在奥数也人人都要学了),说先从相邻区域最多的地区入手,区域1有4种方法,然后2有3种,3有2种,4有3种,5有2种,相乘得4×3×3×2×2=144种方法,我一看没有这个选项,就随便蒙了一个
正解题解:当使用四种颜色时,可先着色区域1,剩下三个颜色涂2345,即有一种颜色涂相对的两块区域,有C(1,3)*2*A(2,2)=12种,由乘法原理得共有4*12=48种。当仅使用三种颜色时:从4种颜色中选取3种有C(3,4)种方法,先着色第一区域,有3种方法,剩下2种颜色涂4个区域,只能是一种颜色涂24,另一种颜色涂35,有2种方法,由乘法原理有C(3,4)*3*2=24种,综上共有48+24=72种
8.【 单选 】2 分
具有n个顶点的连通图生成树一定有(B)条边
- A.n
- B.n+1
- C.n-1
- D.2n
题解:傻瓜题,不讲了
知识点总结:题干就是
9.【 单选 】2 分
150以内最大的素数是(D)
- A.143
- B.145
- C.147
- D.149
题解:100以上的质数大家因为没怎么背过,可能对某些人来说,这个题确实计算量非常大。不过,我们可以把101~150之间的数字全部列出来。从101开始,先找到第一个2的倍数,然后把数列中所有2的倍数划去;再找到3的倍数,把数列中所有3的倍数划去……直到找到一个质数n,n在101~150范围之间的倍数都被划去了,那么就结束,看看没被划掉的最大的数是几就行了(其实,这是在模拟线性筛法求质数)
10.【 单选 】2 分
319和377的最小公倍数是(A)
- A.4147
- B.4107
- C.120263
- D.120253
题解:这一题确实计算量很大,不过这种题还是不要错的好
11.【 单选 】2 分
一个国际研讨会在某地举行,哈克教授、马斯教授和雷格教授至少一人参加这次大会。已知:
(1)报名参加大会的人必须提交一篇英文学术论文,经专家审查通过后才会发出邀请函;
(2)如果哈克教授参加这次大会,那么马斯教授一定参加;
(3)雷格教授只向大会提交了一篇俄罗斯文的学术报告。
根据上述情况,以下哪项一定为真?(D B)
- A.只有哈克教授参加了这次大会
- B.马斯教授参加了这次大会
- C.只有雷格教授参加了这次大会
- D.哈克教授和马斯教授都参加了这次大会
错解:D
正解:B
错因分析:这个题需要列表推出逻辑关系,当时我没列表,手算的,导致很容易出错
正解题解:首先雷格教授肯定不能参加会议,因为他没有英文论文,所以排除C;同时由条件(2)可以推出,如果马斯不参加,哈克也一定不参加,但是如果马斯不参加的话就没有人参加会议了,这与至少有一人参加会议的条件不符,因此马斯一定参加了会议。
12.【 单选 】2 分
一副扑克牌有54张(包括大小王),最少要抽取几张,才能保证其中至少有两张点数一样的牌?(D)
- A.13
- B.14
- C.15
- D.16
题解:假设抽到的全是单个花色的13张牌和2张大小王,则再抽一张一定会出现重复点数
13.【 单选 】2 分
8个人进行乒乓球单打比赛,水平高的总能胜水平低的,欲选出水平最高的两人,至少需要的比赛场数是(C B)
- A.8
- B.9
- C.28
- D.256
错解:C
正解:B
错因分析:我的数学成绩比较差,脑子笨。所以这种奥数题我不在行(不过恶补是可以的)
正解题解:先将8人分成4对比赛,胜者进入第二轮,需要4场比赛,将进入第二轮的四人分成两对比赛,胜者进入第三轮,需要2场比赛,进入第三轮的两人需要1场比赛决出第一名,将第一轮、第二轮、第三轮被第一名淘汰的选手进行2场比赛决出第二名,总共需要4+2+1+2=9场比赛。
14.【 单选 】2 分
独根树的深度为1,则具有2000个结点的非空二叉树的最小深度为(C)
- A.9
- B.10
- C.11
- D.12
题解:根据二叉树的基本性质:一棵深度为n的二叉树最多有2^n-1个结点反推深度,或”有n个结点的二叉树深度至少为⌈
⌉。代入其中一个公式计算即可
知识点总结: 有n个结点的二叉树深度至少为⌈
⌉
15.【 单选 】2 分
在OSI参考模型中,直接为会话层提供服务的是(C)
- A.应用层
- B.表示层
- C.传输层
- D.网络层
题解:直接为××层服务的就是××的下一层,传输层是会话层的下一层
知识点总结:直接为××层服务的就是××的下一层,传输层是会话层的下一层
16.【 填空 】12 分
阅读程序(判断题每题1.5分,选择题每题3分)
1)输入的字符串只能由大写字母和小写字母组成。(B)
A.√
B.×
2)若将第12行改成“scanf(“%s”,str+1);”,程序的运行结果不变。(B)A.√
B.×
3)若将第13行的代码删去,程序的运行结果不变。(A)A.√
B.×
4)在输入的字符串中的任意位置插入任意数量的小写字母(保证数组不越界),程序的运行结果不变。(A)A.√
B.×
5)将第20行代码改成下列选项中的哪一个,程序的运行结果不变。(A)
A.printf(“%c:%d\n”,65+i,number[i]);
B.printf(“%c:%d\n”,‘a’+i,number[i]);
C.printf(“%d:%d\n”,‘A’+i,number[i]);
D.printf(“%c:%c\n”,‘A’+i,number[i]);
6)若输入”DFJEIWFNQLEF0395823048+_+JDLSFJDLSJFKKY”,则输出的最后一行是:(C)
A.Y:1B.89:1
C:Z:0
D.90:0
题解:
这个程序是统计字符串中26个大写字母出现的个数
(1)输入其他字符也可以,只不过最终不管输入多少个其他字符都不会计数
(2)st就代表了整个字符串的首地址的指针,无需加取地址符。如果把st改为st+1,会运行错误
(3)全局变量本来就都初始化为0了,而且这个程序不是多组输入。所以memset可有可无
(4)插入小写字母只不过小写字母不会计数,所以不影响
(5)大写字母A的阿斯克码为65,把‘A’替换为65不会受影响
(6)首先看程序输出的冒号前面的是个字符,排除BD,然后循环是循环到26个字母,也就是这个字母不管出现几次,哪怕一次也没出现都要输出
17.【 填空 】13.5 分
阅读程序(判断题每题1.5分,选择题每题3分)
1)当n<=11时,不论输入什么,输出都是-1。(A)
A.√
B.×
2)若将第30行代码改为“if(prime[i]%10==2)”,则输入任何大于2的正整数,程序的输出都是2。(B A)A.√
B.×
错解:B
正解:A
错因分析:这个题我第一眼觉得这话太绝对了,一般情况下这样的话都是错的,所以把这个题判错了
3)initial程序的时间复杂度是O(N^2)。(B)A.√
B.×
4)输入20,输出的内容是(C B)
A.-1B.11
C.1 11
D.2 3 5 7 11 13 17 19
错解:C
正解:B
错因分析:大意了,1不是质数
5)输入100,输出的内容是(B)
A.-1B.11 31 41 61 71
C.1 11 21 31 41 51 61 71 81 91
D.100以内的所有质数
6)输入下列哪个数,输出结果和输入160的输出结果是相同的。(A)
A.180B.150
C.120
D.100
正解题解:
这个程序是判断小于n(0<=n<=10000)且个位为1的质数有几个并按顺序输出这些质数,没有则输出-1
(1)没有比11小且个位为1的质数,所以输出-1
(2)只有2是偶质数,并且是唯一一个个位为2的质数,所以不管输入什么,只会输出2
(3)埃氏筛时间复杂度为O(nlogn)
(4)比20小并且个位为1的质数只有11
(5)输出所有比100小并且个位为1的质数
(6)这个题的四个选项的最大值为180。既然100以上的质数我们可能不熟,那么可以把101~200(列得多一些保险一些)之间的所有数列出来,然后模拟线性筛求质数,最终得出160到180之间没有个位为1的质数,所以输入160和输入180的输出结果是相同的
18.【 填空 】14.5 分
阅读程序(判断题每题1.5分,选择题第一题、第二题3分,第三题4分)
1)若n==m且输入的数均为正整数,输出的结果一定是1。(A)
A.√
B.×
2)若m==1,则n为正整数时输出的结果一定等于n-1。(B)A.√
B.×
3)如果输入的数中有负数,则程序一定会出现运行错误。(B)A.√
B.×
4)输入2 15,程序的输出结果是(C)
A.0B.1
C.7
D.15
5)输入3 12,程序的输出结果是(C D)
A.0B.1
C.2
D.4
错解:C
正解:D
错因分析:原题写的是“输入312,程序的输出结果是()”,可能是排版问题。我没搞清楚到底是“3 12”还是“31 2”。就随便蒙了一个
6)若要求输出的值为3,下列哪组输入是可行的。(B)
A.5 10B.5 11
C.6 7
D.6 8
正解题解:
程序可以理解为下述按层序编号的完全二叉树,求最后一个结点为n时、以m为根的子树有多少结点
例如m=3,n=12,表示最后一个结点是12,那么以3为根节点的子树共有3、6、7、12共四个结点,即输出4。
(1)m==n时只有最后一个结点。
(2)输出n。
(3)只要m比n大,CountNodes程序会返回0,不会报错。
(4)见图
(5)见分析
(6)见图
19.【 填空 】15 分
完善程序(每题3分)
(完数与盈数)一个数如果恰好等于它的各个因子(该数本身除外)之和,如6=3+2+1,那么称该数为“完数”;若因子之和大于该数,则称其为“盈数”。求出2到60之间的所有“完数”和“盈数”。
【输出格式】
E:e1,e2,e3...(ei为完数)
G:g1,g2,g3...(gi为盈数)
试补全程序
1)处应填(A)
A.0B.1
C.2
D.60
2)处应填(C)
A.sum<xB.sum<=x
C.i<x
D.i<=x
3)处应填(A)
A.i<=60B.i==60
C.i>=60
D.i!=60
4)处应填(A)
A.numberE[sizeE++]=i
B.numberE[++sizeE]=i
C.numberG[sizeG++]=i
D.numberG[++sizeG]=i
5)处应填(C)
A.numberE[sizeE++]=i
B.numberE[++sizeE]=i
C.numberG[sizeG++]=i
D.numberG[++sizeG]=i题解:
(1)sum累加的是x所有的因子和,所以应赋初值为0而不是1
(2)因为是因子,不包括x本身,所以只用循环到x-1就行了
(3)应题干,循环要从2开始到60结束。选A
(4)numberE数组存储的是完数,numberG数组存储的是盈数,不要搞混了。又由于最终输出是0~sizeE(或sizeG)-1,那么数组下标肯定是存储完再加1的,要不然循环就是1~sizeE(或sizeG)了
20.【 填空 】15 分
完善程序(每题3分)
(骑士的旅行)找一条能够让骑士遍历棋盘上所有点的路径(每个点走且只走一次),骑士可以在任何一块方块上开始或结束它的旅行。骑士的走法见下图:每次移动时、先向一个方向走两格、再在垂直的方向上走一格。
【输入格式】
两个数p、q,1<=p、q<=26,代表棋盘是p*q大小的国际象棋棋盘。
【输出格式】
一行,依次包含骑士旅游路径上的所有点坐标(下图是一个8*8的棋盘,国际象棋上的每个点用二维坐标表示,例如A4表示第1列第4行),如果有多组解,输出字典序最小的解。如果无解,输出impossible。
【输入样例1】
1 1
【输出样例1】
A1
【输入样例2】
2 3
【输出样例2】
impossible
【输入样例3】
4 3
【输出样例3】
A1B3C1A2B4C2A3B1C3A4B2C4试完善程序
1)处应填(D C)
A.x+direction[i][0]
B.x+direction[i][1]
C.y+direction[i][0]
D.y+direction[i][1]错解:D
正解:C
2)处应填(D B)
A.visit[x][y]B.visit[nx][ny]
C.visit[col][row]
D.!visit[col][row]
错解:D
正解:B
3)处应填(B)
A.x,yB.nx,ny
C.col,row
D.0,0
4)处应填(C B)
A.visit[nx][ny]=true
B.visit[nx][ny]=false
C.returnfalse
D.此处无需代码错解:C
正解:B
5)处应填(D C)
A.DFS(0,0,1,“A1”)
B.DFS(0,0,0,“A1)
C.!DFS(0,0,1,“A1”)
D.!DFS(0,0,0,“A1”)错解:D
正解:C
总错因分析:我也不知道当初我怎么想的,竟然错了4个
正解题解:
(1)D
(2)每个点只走一次,所以这里要判断有没有走过,如果走过就不能再访问。nx,ny才是计算出的新点位置,xy是原位置、col、row是用于最终字符串输出用的。
(3)B
(4)如果搜索失败,要恢复到搜索前状态
(5)输出impossible是无解的情况,所以AB不对;由于初始设定visit[0][0]=1,相当于已经走了第一步,所以step初值为1而不是0.