2020 CCF非专业级别软件能力认证第一轮 (CSP-J)入门级 C++答案及解析
试卷下载
浙江入围线为77.5分,入围人数共805名,有效参加共5517人。
一、单项选择题
1. 答案:A
解析:每个存储单元都会被分配一个地址,我们可以访问物理地址进行读取/写入数据。
2. 答案:A
解析:编译器的作用
3. 答案:D
解析:^为与,V为或,只有D正确。
4. 答案:C
解析:每个像素占32位,4字节。2048*1024个像素占2048 * 1024 * 4 / 1024 / 1024=8M
5. 答案:C
解析:这个是进行优化的冒泡排序。不优化的冒泡排序是这样的,我们需要n-1趟排序,第i趟我们就可以排好第i大的位置(1<=i<=n-1),所以我们每次仅需要排第一个到n-i+1的即可。
然后我们再来看题目的伪代码,设置一个flag从n开始,直到flag为1才结束。每次k=flag-1,也就是需要排序的倒数第二个,并设置flag=1。然后从头到需要排序的,如果前面的大那么就交换,并记下flag。那么下一次循环就会从更新的flag开始。那如果已经从小到大排好序了,那么也不会交换,也不会更新flag,直接就结束循环了。
6. 答案:B
解析:temp为递归调用前n-1个求得的,如果temp小于A[n],答案就是temp,否则为A[n],这是找小的。递归下去,就找到最小的了。
7. 答案:A
解析:原题警告,链表就是为了解决数组插入删除需要移动元素以及扩展麻烦的这个问题,当然也带来了不可随机访问的问题,他是用指针进行存储的,存储的是下一个的位置。
8. 答案:A
解析:也就是形成一棵树的时候,树每两点均联通。
9. 答案:A
解析:8+2+1=11
10. 答案:A
解析:将两个双胞胎捆绑到一起,进行排序A(4,4),双胞胎两个人也有2种站法,A(4,4) * 2 =48
11. 答案:A
解析:先进先出为队列,先进后出为栈。
12. 答案:D
解析:独根树的高度为1,就告诉你高度从1开始计,我们直接按照完美二叉树(满二叉树)进行计算,也就是找2的几次方-1 <= 61,为6
13. 答案:C
解析:1949%10=9,1949%12=5,也就是己丑,这一年新🇨🇳成立
14. 答案:A
解析: 10个三好学生,中间有9个空,每个班至少有1个名额,我们只要把板子放进空里就能保证。填上6个空就能分为7个组合,也就是C(9,6)=C(9,3)=84
另附上常见的组合数学题目(建议可以自己推一下常见的玩玩):
15. 答案:A
解析:首先我们先从5副手套中选2副手套,也就是C(5,2),接着我们从剩下的6只中选择4只C(6,4)=C(6,2),而且不能成对-3,也就是C(5,2)*(C(6,2)-3)
二、阅读程序
1.字符串解码题,k首先统计有多少个encoder有值,这个0是没有单引号的,也就是'\0',字符串结尾,那么第14行时k=3,之后再判断encoder[i]是不是和字符值相等,没有A,A被填写;没有B,B被填写;有C就不会写,依次填完为"CSPABDEFGHIJKLMNOQRTUVWXYZ",之后会再转换为decoder,也就是以encoder作为位置,为"DEAFGHIJKLMNOPQCRSBTUVWXYZ"。之后在进行转换。这个题目还是比较简单的
1) 答案:对
解析:如果为小写字母'a',下标就为32,越界了
2) 答案:错
解析:如果输出字符串"W",没被编码,原样输出。
3) 答案:对
解析:仅有前三个满足条件,多余的不执行也可以
4) 答案:错
解析:更改后,剩下的就没有值了,也就是0
5) 答案:A
解析:想要输出ABC,那么就要有C、S和P,很优秀的彩蛋
6) 答案:D
解析:想输出CSP呢,就要输入P、R和N
2.我们可以先看第4题,看题的过程中还能解决一道题目,输入之后执行n次,第一次会把d[0]++,然后看一下[0,len-2]是否有1,循环没有,那看最后一个有1,那么1往后挪,答案+1,长度+1,下一次继续看,还是没有,执行n次,每次都+1,所以答案就为D。
所以n仅仅是控制次数,每次都加到第一个上面,k是和d[i]进行比较的,超过k就往后移,那么会不会是统计n用k进制表示进位的次数,也不清楚,可以看看第5题再决定。3 ^ 1产生1次进位,3 ^ 2产生4次进位,没问题啊,所以确实为这个。3 ^ 30会产生几次呢,和等比数列有关,首项是1,末项是q ^ (n-1),即(a1 - q ^ (n-1) * q) / ( 1 - q )=(q ^ n -1)/( q - 1)
1) 答案:错
解析:可以用特殊样例试一下,比如n=1,len=2
2) 答案:错
解析:若输入n=k=2,肯定可以进位,len=2,ans=1
3) 答案:对
解析:len位填不满,所以k的len次方一定大于n
4) 答案:D
解析:见题目分析。
5) 答案:B
解析:等比数列求和
6) 答案 D
解析:考虑更为一般的算进位,也就是把n/10+n/100+n/1000+...+n/100 000 000 000 000算出来,算出来为D
3.这个题目还是有些麻烦的,abs()是绝对值函数,求的d[i-1][1]和d[i][1]的绝对值。他其实是一个合并的操作。是我们每次选原序列里的某个数对,然后把它合并到他当前的前n项,把它后面的挪过来,放到他前面,做一个递归。
1) 答案:错
解析:输入n为0,14行的循环条件也不满足,是错误的。
2) 答案:对
解析:a、x和b、y为0,sum是差,所有的差均为0,所以为0
3) 答案:错
解析:n=1,d[i][0]和d[i][1]均比较大,ans反而变小
4) 答案:B
解析:这个题要把数据带进入模拟一下,每次都是i=1的合并
5) 答案:C
解析:和上一题一样,每次都是i=1走到下一层,
6) 答案:C
解析:这个题也是一样的,i=1下一层,不断模拟,所以这个题也不用懂代码啊,直接模拟,大力出奇迹。
三、完善程序
1.质因数分解是一个常见的题目
1) 答案:C
解析:2是最小的素数,从2开始,从1开始直接死循环
2) 答案:C
解析:我们是优化过后的算法,也就是最后一个为sqrt(n)和i * i <= n等价,其他会有遗漏
3) 答案:C
解析:要把i这个质因子全部除光
4) 答案:A
解析:如果n > 1,那就说明还存在n这个大素数,没有除干净
5) 答案:C
解析:输出n即可。
2.这个题目后几题略微麻烦些,先排序,再贪心。贪心过程中用到的是线段覆盖的思想。
1) 答案:B
解析:排序肯定先对左端点排序,再去调换位置。
2) 答案:D
解析:交换位置,也就是把t=其中一个,其中一个=另一个,另一个=t。
3) 答案:A
解析:线段如果不包含了就应该加上,也就是当前的右端点比最后一个右端点大,第一个肯定在。如果包含那就没必要选择了。
4) 答案:A
解析:q也就是我们循环的变量,从0开始,第一个肯定选,所以我们要看下一个是否比r还要小。看左端点还是右端点呢,r会记录当前的右端点,那么只要我们的左端点<=右端点,一定是相交的(包含已经被过滤掉),相交就要继续向下循环,也就在一个区间的。
5) 答案:B
解析:r会更新为当前的右端点
本文来自博客园,作者:暴力都不会的蒟蒻,转载请注明原文链接:https://www.cnblogs.com/BobHuang/p/13800840.html