导航菜单
首页 >  csp-j真题讲解  > CSP

CSP

请大家注意,CSP-J历年的试题,是分不同版本的卷子的,不同版本,题目一致,但选择题的选项顺序不同,本解析,是以下面发的试题的选项顺序作答的。 视频讲解请访问:https://study.163.com/course/courseMain.htm?courseId=1210723808&share=2&shareId=400000000664095

本篇题解,先发解析,再发试题,试题在解析下面。

请大家注意,CSP-J历年的试题,是分不同版本的卷子的,不同版本,题目一致,但选择题的选项顺序不同,本解析,是以下面发的试题的选项顺序作答的。

本篇题解,先发解析,再发试题,试题在解析下面。

一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)

1. B

常识题

2. A

编译型:将源码直接转换为二进制代码,生成目标程序,然后将目标程序连接成可执行的程序。流程为:高级语言源码 —编译—> 目标程序 —连接—> 可执行程序。

3.C

与:∧ and &&

或:∨ or ||

非:¬ ! NOT

异或:^

优先级:括号 > 非 > 与 > 异或,或,口诀:非与或

4.B

2048 * 1024 * 32 / 8 / 1024 /1024 MB

5.D

冒泡排序比较次数最少的情况:原本所有数字的顺序就是对的,一趟比较结束,所以是比较 n-1 次。

6.B

代码解析如下,分析代码可知,题目是求n个数的最小数:

int XYZ(int a[],int n)//n个元素 从下标 1 开始存储

{

if(n==1)

return a[1];

else

{

int temp=XYZ(a,n-1);

return min(temp,a[n]);

}

}

7.B

可随机访问任一元素是线性表的特点。

8.C

n个顶点的无向图,至少需要n-1条边,才能连通。

9.C

按权展开,计算可得11。

10.D

捆绑法求解:A4/4 * A2/2 = 48

11.C

常识题

12. D

floor(log2n)+1 = 6

13. B

1949%10=9,因此是已

1949%12=5,因此是丑

14.B

插板法C6/9 = 84

15. D

先从5副手套选2副:C2/5

再从生下3副选2副,每副选1只:C2/3 * C1/2 * C1/2

因此答案 = C2/5 * C2/3 * C1/2 * C1/2 = 120

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填√, 错误填×;除特殊说明外,判断题1.5分,选择题3分,共计40分)

1.

这个程序通过encoder,decoder两次转换产生一个乱序字符串,利用乱序字符串加密

encoder ="CSPABDEFGHIKLMNOQRTUVWXYZ"

decoder ="DEAFGHIKLMNOPQCRSBTUVWXYZ"

(1)√

因为数组大小为26,所以只能是大写字母,如果有小写字母会越界。

(2)×

根据decoder字符串的值,如果输入是T~Z之间的字母,输出是一样的。

(3)√

第12行是统计字符数,由于默认有3个字母,因此修改循环的值不影响统计结果。

(4)×

这里改了之后,decoder数组会少一段,影响输出。

(5)A

输出中有ABC,对应decoder[2]、decoder[18]、decoder[15],则输入的字符分别为字符C S P。

(6)D

输出中有ABC,对应decoder[15]、decoder[17]、decoder[13],则输入的字符分别为字符P R N。

2.

代码的作用是十进制的 n 转换成 k 进制的数字,输出的ans为进位的次数,len为结果的长度。

(1)×

当k为1时,n为1,1进制的1,len 为2,所以错误。

(2)×

输入n为1且 k > 1 时,ans == n

(3)√

n转化为 len 位的 k 进制数字值 最大值为 k^len - 1 ,因此k^len>n。

(4)D

当输入的 k 为 1 时,会直接进位,len为2,但是后面触发不了len++的条件,结果就是,len一直是2,每次 d[0]++ 都会进位,输出 ans == n。

(5)A

第1位,每k次运算进位1次;

第2位,每k2次运算进位1次;

……

因此第1位,会产生3^30/3次进位,第2位会产生3^30/3^2次进位……最后一位,会产生1次进位。

因此答案 = 3^30 / 3 + 3^30/3^2 + … + 1

根据等比数列求和公式Sn  = (3^30 – 1) / (3 - 1)

(6)D

同上一问:

第1位进位次数 = 100010002000090 / 10次

第2位进位次数 = 100010002000090 / 100次

最后一位进位次数 = 1次

对上述数值求和可得D

3.

每次将前两项合并,并清除一项,累计计算:a+x+abs(b-y)的和。

(1)×

输入 n 为0,什么都没做,结束程序。

(2)√

全是0,运算过程中所有 s 都是 0,ans 也是0

(3)×

这里减法,所以 ans 可能小于 输入的 d[ i ][ 1 ],例如

输入:

0 0

5 5

输出:

0

(4)C

第二列为0,可以忽略。

第1次合并:9+9=9*2

第2次合并:18+9=9*3

第3次合并:27+9=9*4

第19次合并:9*29

因此和 = 9*2 + 9*3 + … + 9 * 20 = 1881

(5)B

第1次合并:5-5=0

第2次合并:5+5-5=5=5*1

第3次合并:10+5-5=10=5*2

第29次合并:5*30-5=5*28

求和 = 5 * (1 + 2 + … + 28) = 2030

(6)D

对于第1列:

第1次合并 = 15+14

第2次合并 = 15+14+13

第14次合并 = 15+14+13+12+…+1

15*14+14*14+13*13+…+1*1 = 1225

对于第2列:

第1次合并 = 15-14

第2次合并 = 15+14-13

第3次合并 = 15+14+13-12

……

第14次合并 = 15+14+13+12+…+2-1

15*13+14*12+…+3*1=1001,这里加上14个1

最终答案是:2240

三、完善程序(单选题,每小题3分,共计30分)

1.

(1)D

因子最小为2,所以 选 i = 2

(2)D

因子最大为 根号n 所以选 i * i

(3)D

由题目可知,一个因子可能被分解出好多次

(4)A

分解完成后,n 的值为 1 或者质数,判断剩余的是不是质数。

(5)D

不是 1 的 话需要单独输出

2.

(1)C

按照区间起点进行排序

(2)C

基础的交换代码

(3)C

这里筛掉起点靠后同时终点靠前的区间,因为这样的区间完整的被前面选中的区间包含了。

(4)B

此时剩余的区间逐个选用,优先选用能和前一个区间连接的情况下,右端点更靠右的区间。

(5)B

更新r为当前选中区间的右端点的值。

相关推荐: