分类
CSP-J/S

初赛模拟3解析

1:A计算机基本存储单位是(Byte),计算机最小的存储单位是(bit).
2:D。WPS是金山公司开发的办公软件,其余都属于操作系统。OS/2是Microsoft和IBM公司共同创造,后来由IBM公司单独开发的一套操作系统。
3:A。pow函数是指数函数,也称为幂函数。ceil是向上取整函数,floor向下取整函数,sqrt开平方根函数,log对数函数。
4:D。 八进制237转换成二进制是10011111
十六进制1BF转换成二进制是110111111
A、B、C中B选项最大。十六进制1BF转换成十进制,按权展开1×162+11×161+15∗1=447,故选D。
5:D。运算符^ | &均为位运算符,要把数字转化为二进制参与运算。数字3是0011,数字9是1001,分别按位进行异或,位或,位与
6:C。for循环头部可以不写条件部分,不写条件部分若没有break语句即为死循环。 本题为简单题,考察for语句,break和continue语句。
7:B。先将a压入栈,最后计算所以将’+’放置在最右侧,再将b和c压入栈,将’-‘后置在’b’旁,再将差和d相乘,后缀形式是b c – d *,整体的后缀形式是 a b c – d * +。
8:B,平年会有365天,即52周余1天,闰年会有366天,即52周余两天,因为生日在8月所以需要考虑当前年份是否是闰年,而不是考虑前一年,已知2012年,2016年和2020年是闰年,因为2011年余1天所以是在周日,同理可推得2012年余两天在周二,2015年在周五,2016年余两天在周日,后续均不在周末,2020年在周五,所以共计两天在周末。
9:C,n层满二叉树的结点数量为2n-1,若要2n-1 > 300 的,则n >= 9,则至少有9层。
10:C,根据栈的特点是先进后出,队列的特点是先进先出,出队顺序即为入队顺序和出栈顺序,操作如下:
1入栈,1出栈
2、3、4入栈,4出栈(栈中有2、3和4,3个数据元素)
5,6入栈,6出栈(栈中有2、3、5和6,4个数据元素)
5、3、2依次出栈
栈中最多有2、3、5和6,4个数据元素,答案选C。
11:B。本题考察模拟算法,初始状态编号0……99,状态都为1。第一轮循环,将1的倍数的所以位置改变状态,也就是0……99全部改为0。第二轮循环,所有2的倍数的位置改变状态,其中50个位置变为1。第三轮循环,所有3的倍数的位置改变状态,0、3、6、9、12……96、99,可以发现是奇偶交替的,所以一个偶数位置变化(从1变为0),后面一定有一个奇数位置变换(从0变为1),所以三轮循环结束后,还是有50个位置状态为1。
12:B。根据题目可以列出两个式子:C+D = 92 C-D = 28 解方程即可得到C市有60万人,D市有32万人。
13:C。A选项最后缺11,或者直接把最后一项改为1。B选项最后一项应改为11。D选项第一项直接改为0,或者在第一项后面加01。
14:B,按照前序和中序遍历可以得到如图所示的二叉树,从前序遍历可知A为根节点,结合后序遍历可知其左子树包含GKDBHE,其右子树包含CIFJ。先看左子树,中序遍历可知,B的左子树包含GKD,右子树包含HE,结合前序遍历可知D和E是B的左右孩子,H是E的左孩子,G和K在前序和中序中的顺序相同,则K是G的右孩子,因为如果是左孩子顺序会变化,A的左子树完成画出。再来看右子树,根据前序和后序中C和F的顺序不变,则F是C的右孩子,I和J在前序和中序中相对于F的顺序发生变化可知,I为F的左孩子,J为右孩子,A的右子树画出。
15:A。这道题是n个相同元素分到m个相同容器的问题,不能为空,只需要考虑数量分布,有序枚举解题即可。(1,1,1,7)、(1,1,2,6)、(1,1,3,5)、(1,1,4,4)、(1,2,2,5)、(1,2,3,4)、(1,3,3,3)、(2,2,2,4)、(2,2,3,3)。

阅读程序1:模拟法
1、F 输入0 0 1或0 0 2时,答案均为0
2、F 输入0 0 1,执行完第17行后,a[2]=b[2]=1。
3、T 0乘以任何数字都是0
4、F 字母以整数类型读入会转换成其对应的ASCII码
5、C 自行模拟过程计算
6、C 自行模拟过程计算

阅读程序2:搜索算法
1、F 该程序输入1+n*(n-1)/2个整数
2、F 这个程序的时间复杂度是O(2n),当n达到100时,爆栈。
3、F 结果是从最后一层到(1,1)的最大路径和。
4、T 这两个递归调用互相不影响。
5、D 这个程序是寻找从(1,1)到最后一行的最大最大路径和,每次只能从(i,j)走到(i+1,j)或(i+1,j+1),通过观察可以得到最大和路径为14.
6、B 最大路径和为120.

阅读程序3:通过画图模拟可以得到结果。
1、T 去掉这两行,cnt的值永远为0,程序死循环。
2、T 送分题。
3、T 去掉这两行,方向没有改变,小球走出边界后一直往该方向走,程序死循环。
4、F 第1、2次碰撞的时间复杂度都是O(L),则总时间复杂度为O(L)。
5、C 通过模拟小球的移动,第一次碰到(2,2),第二次碰到(1,3)。
6、D 当该点到达(2,2)时,x与y同时到达边界,则终止结点为(2,2)。

完善程序一:此题主要实现的是readint函数,该函数通过逐个读取字符的方法读取一个整数。该函数的流程是:过滤掉非数值字符,读取连续数值字符直到遇到非数值字符,同时将读取的字符转化为数值,最后输出数值。
(1)D 第一个while循环实现的功能是过滤非数字,这一步只需要不断读取就好,所以仿照前面写的cin.get()。
(2)B 当退出过滤非数字的while循环时有两种情况:读取了数字的第一个字符或者读取到了负数标记。else分支对应的是读取到了数值,所以应用用字符c更新num的大小。注意:字符型的c必须减去’0’或48才能得到对应整数的数值。
(3)A 第三空是读取连续的数字,因此循环条件为读取到的字符是数字字符。
(4)B 第四空时用读取的数字字符对num值进行更新,就是num*10+c-‘0’。
(5)A 第五空对应的是负数的处理,如果负数标记为1,那么应该取相反数。

完善程序二:ans是所求的和,len就是长度,beg是起始位置的前一个位置,而i-beg正好就是当前所选序列的长度,tmp是当前序列的和。
(1)B 应该是起始位置1的前一个,所以填0。
(2)D 逐一扫描,因为是连续和,所以一重循环即可,首先判断当前这个数是否使解更优,更优就填进去,否则再看是否和最优解相等,相等的话根据题目,要长度更长的,再进行长度的判断,因此选D。
(3)A 如果当前解已经为负数,且下一个数是正数,那么肯定把当前解全部舍掉,所以无论下一个数是正是负,当前解都会被舍掉,所以重新清0。
(4)D tmp归0,beg是起始位置的前一个,而起始位置是下一个数。
(5)A 如果当前解是正的,那么则继续留到下一位。