CSPJ-2024-初赛模拟题 1 1 单选题 (4/4 分)
工人 A 和工人 B 在制造厂工作。工人 A 每小时可以制造 8 个鼠标或 3 个键盘,而工人 B 每小时可以制造 5 个鼠标或 5 个键盘。在一个工作日 8 小时内,A 和 B 通过合理调配,最多可以制造出( )个键鼠套
装。
A 43
B 48
C 40
D 46
2 单选题 (4/4 分)
一个盒子里有一定数量的糖果。小雷和小星轮流拿糖果,每次可以拿
1 个、2 个,或者 3 个,拿走最后一个糖果的人获胜。如果小雷先拿,
那么在糖果总数为( )个时小星将最终获胜。
A 1052
B 105 C 677
D 大于 3 的偶数
3 单选题 (4/4 分)
G 是一个有 21 条边的非连通无向图,请问 G 至少有()个顶点
A 5
B 6 C 7
D 8
4 单选题 (4/4 分)
下列叙述中不正确的是( )。
A 所谓算法就是计算方法
B 程序是算法的一种实现方式
C 算法有可能是不会终止的程序
D 算法设计需要考虑算法的执行时间
5 单选题 (4/4 分)
在网站链接 https://www.baidu.com 中,.com 被称作( )
A 传输语言 B 顶级域名 C 编码格式
D 传输协议
6 单选题 (4/4 分)
一个篮子中有 45 个苹果、40 个橙子和 42 个梨子。一个人每次从篮子中随机抽取一个水果,至少经过( )次后,篮子中某种水果的数量才
可能不足 10 个。
A 31 B 28 C 25
D 35
7 单选题 (4/4 分)
两位同学讨论关于太阳能的问题。小安认为太阳能是不实用的,因为天气常常阴雨绵绵,经常无法获得太阳能。小星认为太阳能是实用
的,因为太阳能是一种清洁的能源。
A 小安提出的观点;小星提出的事实
B 小安和小星提出的都是事实
C 小安提出的都是事实;小星提出的是观点
D 小安和小星提出的都是观点
8 单选题 (4/4 分)
下列编程语言中属于解释性语言的是( )。
A C++
B Pascal
C Python
D C
9 单选题 (4/4 分)与十进制数 63.75 相对应的 16 进制数是( )。
A 3F.C
B 3E.A
C 40.2
D 3C.F
10 单选题 (4/4 分)
以下哪个选项不是结构化程序设计方法的特点( )?
A 模块化
B 面向对象
C 顺序性
D 自顶向下
11 单选题 (4/4 分)
设循环队列中,数组的下标范围为 0∼m−1,头尾指针分别为 f 和 r。
若当前队列中有 n 个元素,则下列等式中成立的是( )。
A r-f=n
B r-f+1=n
C (r-f+1)%m=n
D (r-f+m)%m=n
12 单选题 (4/4 分)设栈 S 的初始状态为空,元素 a,b,c,d,e,f 依次入栈 S,出栈的序列为 b,d,c,f,e,a,则栈 S 的容量至少应该是( )。
A 3
B 4
C 5
D 6
13 单选题 (4/4 分)已知二叉树的中序遍历为 DEGHFCABI,后序遍历为 HGFEDCIBA,则该二叉树的前序遍历为( )。
A ABCDEFCHI.
B ACDEFHGBI
C ADCEFGHBI
D ACDEFGHBI
14 单选题 (4/4 分)前缀表达式+4×2+5(空格)12 的值是( )。
A 24
B 26
C 38
D 13
15 单选题 (4/4 分)
有 75 个人围成一圈,从第一个人开始报数,每次数到第 4 个人出列。
最后一个出列的人在初始队列中的编号是( )。
A 17
B 26
C 52
D 73
16 单选题(4/4 分)
union U1 { int n; char s[11]; double d;
}; union U2 { int n; char s[5]; double d;
};
联合体U1和U2分别占()字节和()字节
A 11 8
B 12 16
C 16 16
D 16 8
2023CSP-J 初赛模测 1-阅读 1 阅读以下代码回答问题。其中 n,m,a[i]≤10000。
01 #include <bits/stdc++.h>
02 using namespace std;
03 typedef long long ll;
04 int main() {
05 int m, n;
06 cin >> m >> n;
07 vector<int> a(m);
08 for (int i = 0; i < m; ++i) cin >> a[i];
09 sort(a.begin(), a.end());
10 double ans = 1e18;
11 for (int i = 0; i + n <= m; ++i) {
12 double sum = 0;
13 for (int j = i; j < i + n; ++j) sum += a[j];
14 double D = 0;
15 for (int j = i; j < i + n; ++j)
16 D += (a[j] - sum / n) * (a[j] - sum / n);
17 ans = min(ans, D);
18 }
19 cout << ll(floor(ans)) << endl;
20 return 0;
21 }
17 单选题 (3/3 分)将第 7 行替换成 int a[m];,程序行为不变。( )
A 正确
B 错误
18 单选题 (3/3 分)
由于 m、n、a[i]的数值都不大,且都为整数,所以将 12 行的 double 改成 ll,程序行为不变。( )
A 正确
B 错误
19 单选题 (3/3 分)
程序总是输出一个整数。( )
A 正确
B 错误
20 单选题 (3/3 分)
当输入为
5 3
1 2 3 4 5
时,输出为“2”。( )
A 正确
B 错误
21 单选题 (3/3 分)该算法最准确的时间复杂度分析结果为 O(mlog m+mn)。
A 正确
B 错误
22 单选题 (6/6 分)
当输入为
10 3
14 1 10 11 22 16 3 23 8 17
时,输出为( )。
A 4
B 36
C 125
D 90
2023CSP-J 初赛模测 1-阅读 2 阅读以下代码回答问题。其中 T≤1000。
01 #include<bits/stdc++.h>
02 using namespace std;
03 #define int long long
04 const int N=1005;
05 const int mod=1e9+7;
06 int T,n,f[N],sum[N];
07 signed main(){
08 for(int i=1;i<N;i++){
09 while(++f[i]) if(i%f[i]) break;
10 sum[i]=(sum[i-1]+f[i])%mod;
11 }
12 scanf("%lld",&T);
13 while(T--){
14 scanf("%lld",&n);
15 printf("%lld\n",sum[n]);
16 }
17 return 0;
18 }
23 单选题 (3/3 分)第 7 行的 signed 替换成 unsigned,对程序没什么影响。( )
A 正确
B 错误
24 单选题 (3/3 分)当输入的 n 为“10”时,f[10] = 3。( )
A 正确
B 错误
25 单选题 (3/3 分) n 越大,f[n]和 sum[n]的值越接近。( )
A 正确
B 错误
26 单选题 (3/3 分)
第 9 行的“%”替换成“/”,可以加快程序的执行效率。( )
A 正确
B 错误
27 单选题 (6/6 分)当输入为“1 10”时,输出为( )。
A 21 B 36
C 26
D 42
28 单选题 (6/6 分)
当输入为“2 15 30”时,输出分别为( )。
A “41”和“82”
B “40”和“82”
C “52”和“102”
D “56”和“100”
2023CSP-J 初赛模测 1-阅读 3 阅读以下代码回答问题。其中 n,m≤20000。
01 #include<bits/stdc++.h>
02 using namespace std;
03 struct num {int a,b;};
04 void fun(struct num s[], int n) {
05 int index,j,k;
06 struct num temp;
07 for(k=0; k<n-1; k++) {
08 index = k;
09 for(j=k+1; j<n; j++)
10 if(s[j].b<s[index].b) index=j;
11 if(index!=k) {
12 temp=s[index];
13 s[index]=s[k];
14 s[k]=temp;
15 }
16 }
17 }
18 int main() {
19 int count,i,k,m,n,no;
20 struct num s[100];
21 cin>>n>>m>>k;
22 for(i=0; i<n; i++) {
23 s[i].a=i+1;
24 s[i].b=0;
25 }
26 i=0;
27 count=no=0;
28 while(no<n) {
29 if(s[i].b==0)
30 count++;
31 if (count==m) {
32 no++;
33 s[i].b=no;
34 count=0;
35 }
36 i++;
37 if(i==n)
38 i=0;
39 }
40 fun(s,n);
41 printf ("%d:%d\n",s[k-1].b,s[k-1].a);
42
43 } return 0;
29 单选题 (3/3 分)若输入为:0 0 0 时,程序运行会出错。( )
A 正确
B 错误
30 单选题 (3/3 分)若输入为:1 2 3 时,则输出为 3:1。( )
A 正确
B 错误
31 单选题 (3/3 分)若把 11 行的“index!=k”改为 1,不会影响程序运行结果。( )
A 正确
B 错误
32 单选题 (3/3 分)
若去掉 37 和 38 行,不会影响程序运行结果。( )
A 正确
B 错误
33 单选题 (3/3 分)程序运行时,输入 5 4 3 ,输出( )。
A 3:5
B 2:3
C 1:2
D 4:1
34 单选题 (7/7 分)程序运行时,输入 7 5 2,输出( )。
A 1:5
B 6:1
C 2:3
D 2:4
35 单选题 (7/7 分)
当输入为
3 6
1 1 2 2 2 3
1 22 1 3 1
1 3 1
2 3 1
时,输出是( )。
A No Yes No
B Yes No No
C No No Yes 答案
D Yes Yes No
2023CSP-J 初赛模测 1-完善 1
(枚举正方形)给定 n 个二维平面点,选择一个与坐标轴平行的边长为 L 的正方形,使得内部点的数量最大。
试补全枚举程序。
01 #include <cstdio>
02 #include <algorithm>
03 using namespace std;
04 const int N = 100 + 5;
05 const int inf = 0x3f3f3f3f;
06 struct node{
07 int x;
08 int y;
09 } e[N];
10 int main(){
11 int n, L, ans = 0;
12 scanf("%d%d", &n, &L);
13 int a = inf, b = inf, c = -inf, d = -inf;
14 for (int i = 1; i <= n; i++){
15 scanf("%d%d", &e[i].x, &e[i].y);
16 ①
17 ②
18 }
19 for (int i = a; i <= ③; i++)
20 for (int j = b; j <= ④; j++){
21 int nowAns = 0;
22 for (int k = 1; k <= n; k++)
23 if (⑤)
24 nowAns++;
25 ans = max(ans, nowAns);
26 }
27 printf("%d\n", ans);
28 return 0;
29 }
36 单选题 (6/6 分)
① 处应填( )
A a=max(a,e[i].x), b=max(b,e[i].y);
B a=max(c,e[i].x), b=max(d,e[i].y);
C c=min(c,e[i].x), d=min(d,e[i].y);
D c=max(c,e[i].x), d=max(d,e[i].y);
37 单选题 (6/6 分)
② 处应填( )
A a=max(a,e[i].x), b=max(b,e[i].y);
B a=min(a,e[i].x), b=min(b,e[i].y);
C c=max(c,e[i].x), d=min(d,e[i].y);
D c=min(c,e[i].x), d=min(d,e[i].y);
38 单选题 (6/6 分)
③ 处应填( )
A a+L
B c
C d
D b+L
39 单选题 (6/6 分)
④ 处应填( )
A b+L
B c
C d
D a+L
40 单选题 (6/6 分)
⑤ 处应填( )
A e[k].x>=i && e[k].x<=i+L && e[k].y>=j && e[k].y<=j+L
B e[k].x>=i && e[k].x<=j+L && e[k].y>=j && e[k].y<=i+L
C e[k].x>=i && e[k].x<=L && e[k].y>=j && e[k].y<=L
D e[k].x>=i && e[k].x<=j && e[k].y>=j && e[k].y<=i
2023CSP-J 初赛模测 1-完善 2
(区间重叠)给定 n 个左闭右开的区间,求最多有多少个区间互相重
叠。
试补全程序。
01 #include <bits/stdc++.h>
02 using namespace std;
03 int main()
04 {
05 int n;
06 cin >> n;
07 vector<int> s(n), t(n), id(n);
08 for (int i = 0; i < n; ++i)
09 cin >> s[i] >> t[i];
10 for (int i = 0; i < n; ++i) id[i] = i;
11 sort(id.begin(), id.end(), [&](int x, int y) { return s[x] < s[y]; });
//使用匿名函数(lambda表达式)简化代码
12 int k = 0;
13 vector<int> f(n, -1);
14 for (int i = 0; i < n; ++i) {
15 int ok = 0;
16 for (int j = 0; j < ①; ++j) {
17 if (f[j] <= ②) {
18 ok = 1;
19 f[j] = ③;
20 break;
21 }
22 }
23 if (!ok) {
24 f[k] = ④;
25 ⑤;
26 }
27 }
28 cout << k << endl;
29 return 0;
30 }
41 单选题 (6/6 分)
① 处应填( )
A n
B i
C id[i]
D k
42 单选题 (6/6 分)
② 处应填( )
A s[id[i]]
B f[i]
C t[id[i]]
D f[k]
43 单选题 (6/6 分)
③ 处应填( )
A f[k]
B f[i]
C t[id[i]]
D s[id[i]]
44 单选题 (6/6 分)
④ 处应填( )
A k
B s[id[i]]
C t[id[i]]
D id[i]
45 单选题 (6/6 分)
⑤ 处应填( )
A f[k]++
B k++
C f[j]++ D id[i]++