CSP-J 初赛模拟卷5 题解

注:这套题是我初赛集训班的模拟题,洛谷上可能搜不着一模一样的原题。切勿当真

注:有的题一道题有两个答案,红色为错解,绿色为正解,是我在做这套题时的错题(以前的那四套题课上也做过,只不过当时没想到可以写错题分析,这套题解算是最完整的)

此次得分: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个结点的二叉树深度至少为⌈log_{2} n⌉。代入其中一个公式计算即可 

知识点总结: 有n个结点的二叉树深度至少为log_{2} 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:1

B.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.-1   

B.11   

C.1 11 

D.2 3 5 7 11 13 17 19  

错解:C

正解:B

错因分析:大意了,1不是质数


5)输入100,输出的内容是(B) 
A.-1   

B.11 31 41 61 71   

C.1 11 21 31 41 51 61 71 81 91   

D.100以内的所有质数


6)输入下列哪个数,输出结果和输入160的输出结果是相同的。(A
A.180   

B.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.0   

B.1   

C.7   

D.15


5)输入3 12,程序的输出结果是(C D)  
A.0   

B.1   

C.2   

D.4

错解:C

正解:D

错因分析:原题写的是“输入312,程序的输出结果是()”,可能是排版问题。我没搞清楚到底是“3 12”还是“31 2”。就随便蒙了一个


6)若要求输出的值为3,下列哪组输入是可行的。(B)  
A.5 10   

B.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.0   

B.1   

C.2   

D.60


2)处应填(C) 
A.sum<x   

B.sum<=x   

C.i<x   

D.i<=x


3)处应填(A) 
A.i<=60   

B.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,y   

B.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.

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值