2024CSP-J原创初赛模拟卷1

(认证时间:2023年9月16日 09:30~11:30)
*
基本信息:
姓名:
姓名:
班级:
班级:
学校:
学校:

一、单项选择题(每题只有一个正确选项,每题2分,共30分)

*
1.在互联网中,我们通过域名就能获得对应的IP地址依靠的是()
A.ARP
B.MAC
C.DNS
D.TCP
*
2.C++中,不能作为函数重载判断依据的是()
A.返回类型
B.参数类型
C.参数个数
D.参数顺序
*
3.根节点高度为1,一棵拥有512个节点的二叉树的高度至少为()
A.8
B.10
C.11
D.9
*
4.王老师最近在给班上的同学安排午餐食谱,要求一份食谱里要有3种荤菜和1种素菜,或有2种荤菜和2种素菜,如果总共有6种荤菜和4种素菜可选,则王老师最多可以设计出多少种食谱()
A.90
B.152
C.170
D.180
*
5.12人排成一列纵队,并从前往后依次编号为1-12号。现在要求大家打乱重新排序成一个与原有序列不同的方式,并重新按序编号。请找出有多少种方案,使得所有人的新号码与原始号码相差不超过1。
A.155
B.227
C.232
D.239
*
6.以下哪个不是C++中的关键字()
A.int
B.static
C. friend
D.priority
*
7. 一个链表中,每一个结点有一个 next 指针指向下一个结点,现在想要删除链表中结点 p 的下一个结点,正确的操作是?
A. free(p->next);
B. temp = p->next; p->next = temp->next; free(temp);
C. temp = p->next; temp->next = p->next; free(temp);
D. temp = p->next; free(temp);
*
8. 入栈顺序为 1,2,3,4,5,则不可能的出栈顺序为( )
A. 1 2 3 4 5
B. 5 4 3 2 1
C. 3 2 1 5 4
D. 3 1 2 4 5
*
9.李老师要将野营活动中的10位同学分成扎营、做饭、探路3组,要求每组之间人数相差不能超过两人,请问李老师有几种分配方案()
A.4200
B.8400
C.22050
D.44100
*
10.王妈妈每天都会开车去接小王放学回家,晚上5:30王妈妈出发,6:00到达学校,且小王刚好放学,接到小王后两人6:30准时到家。但今天小王提前放学,王妈妈并不知道,小王自己先走路回家,两人在5:55分时见面并启程返回(假定所有的相关的移动都是匀速运动),那么两人今天到家的时间是()
A. 6:15
B. 6:20
C. 6:25
D. 6:30
*
11.以下哪个不属于线性结构()
A.队列
B.树
C.栈
D.线性表
*
12. (原码反码补码)以下哪个编码不能表示数字 0
A.
B.
C.
D.
*
13. 一个二叉树的后序遍历序列为 BEDCA,中序遍历序列为 BADEC,则先序遍历序列为:
A. ABCDE B. ABDCE
C. ABCED D. ABDEC
*
14. 定义了一个数组 int A[8] ,那么 &A[5] 的值和哪一项相等( )。
A. A+160
B. A+40
C. A + 5
D. A + 20
*
15. 假设 a = true, b = true, c = false,则逻辑运算表达式为真的是()
A. (a∧c)∨(
c)∨(
c)∨(b∧c) B. (a∨c)∧(b∧c)
D. a ∧ (b ∨ c) ∧ c

二、程序阅读理解题(共3大题。程序输入不超过数组或字符串定义的范围,除特殊说明外,判断题1.5分,选择题3分,共计40分)

(1)(9.5分)


题目保证输入均为正整数

l判断题

*
16. apple(5,3)的结果比apple(4,3)小()
*
17. 第5行的if中应该改为加入对n==0的判定,否则会导致程序无法运行出结果(2分)(  )
*
18. 当输入的m,n为8,9时,apple函数被调用的次数是()
A.29
B.31
C.46
D.47
*
19.当输入的m,n为9,8时,apple函数被调用的次数是()
A.57
B.59
C.61
D.63

(2)(13.5分)


输入保证 r 大于等于 l,且 l,r 均为正数。

l判断题

*
20.若取消第 8 行,并将所有 temp 全部替换成 i,程序一定可以运行出结果,但是结果可能会错。
*
21.若将第 9 行 last 的初始值改为 1,则程序运行结果一定不变。
*
22.最终输出的值不可能大于 r-l。
*
23. 如果输入为 100 300,则运行结果为()
A. 200
B. 199
C. 198
D. 201
*
24.如果输入为 1 10000,则运行结果为()
A. 9700
B. 9701
C. 7000
D. 7001
*
25.若将第 4 行中 mod 改为 6,输入为 1 100000,则运行结果为()
A. 0
B. 66666
C. 97000
D. 100000

(3)(17分)



假设输入的是个小数,且如果有括号,则括号内表示无限循环部分

l判断题

*
26.若将头文件更换为include<cstdio>,程序不能正常运行( )
*
27.假如程序输入的是1.25,则程序的输出为125/100(2分)( )
*
28.若将第49行中s.length()-1改为s.length(),则程序可能会越界( )
*
29.将12行{}中的内容改为以下哪一项,程序将不能正确执行()
A.return y?gcd(y,x%y):x;
B.return y>0?gcd(y,x%y):x:
C.if(y) return gcd(y,x%y);else return x;
D.if(x%y) return y,else return gcd(y,x%y);
*
30.输入1.(3),得到的结果是()
A.13/100
B. 8/6
C.130/1000
D.4/3
*
31.输入0.168(5),得到的结果是()
A.1516/9000
B.1517/9000
C.1518/9000
D.1519/9000

三、程序完善题(共2大题,每个选择题3分,共计30分)

1.(求众数)给出一个数字 $n$,接下来给出 $n$ 个数字,求这 $n$ 个数字中出现次数最多的数字。

提示:先排序数组,使得所有相同的数字在连续的一段。然后统计每一段数字的长度,最长的长度对应的数字即为众数。


*
32. 1 处应填()
A. a[i] != a[i-1]
B. a[i] == a[i-1]
C. a[i] > max_time
D. a[i] < max_time
*
33. 2 处应填()
A. ans = max_time
B. cnt = 0
C. ans = a[i]
D. ans = a[i-1]
*
34. 3 处应填()
A. ans = max__time
B. cnt = 0
C. cnt = 1
D. ans = a[i]
*
35. 4 处应填()
A. ans = max__time
B. ans = a[i]
C. cnt = 1
D. ans = a[n]
*
36. 5 处应填()
A. ans
B. cnt
C. max_time
D. a[n]

2.(数组选数)给定一个大小为 n 的数组和一个数字 k,问能否从这些数字中取到一些数字使得其和为 k。若能,输出 YES,否则输出 NO。

输入第一行包含两个正整数 n,k,接下来一行包含 n 个正整数,表示数组的内容。

提示:使用分治的思想来做,将数组切割成多段子数组。对于每一段子数组,都新建一个 bool 类型的 ans 数组用于保存每个数字能否被取到,再合并多段子数组算出的 ans 数组,最终合并成一个总的 ans 数组,判断 ans[k] 是否为 1,则可以得到答案。


*
37. 1 处应填()
A. ans[0] = 1
B. ans[l] = 1
C. ans[mid] = 1
D. ans[r] = 1
*
38. 2 处应填()
A. return
B. ans[a[l]] = 1
C. ans[l] = 1
D. return ans
*
39. 3 处应填()
A. for(int i = 1; i <= n; i++)
B. for(int i = l; i <= r; i++)
C. for(int i = 0; i <= k; i++)
D. for(int i = a[l]; i <= a[r]; i++)
*
40. 4 处应填()
A. ans[j] = 1
B. ans[a[j]] = 1
C. ans[i+j] = 1
D. ans[i+a[j]] = 1
*
41. 5 处应填()
A. dfs(n, k)
B. dfs(0, n)
C. dfs(1, n)
D. dfs(0, n-1)
问卷星提供技术支持
举报