CSP-J2026初赛模拟卷一

姓名
    ____________
1. 在标准ASCII码表中,已知英文字母c的ASCII码十进制表示是99,那么英文字母x的ASCII码十六进制表示是?
A.77
B.78
C.79
D.7A
2. 以下关于CSP与GESP的描述正确的是?
A.CSP-J/CSP-S属于非专业级别软件能力认证,只有中小学生才能参加
B.CSP-J/CSP-S是中国通信学会举办的程序设计竞赛
C.GESP是中国电子学会举办的程序设计竞赛
D.GESP C++七级成绩80分及以上或者八级成绩60分及以上,可以申请免CSP-J初赛
3. 以下可以用作C++程序中的变量名的是?
A._x1
B.new
C.class
D.public
4. 以下不属于桌面或者手机操作系统的是?
A.Linux
B.Android
C.MATLAB
D.Windows 11
5. C++中使用输入和输出函数cin和cout会用到哪个头文件?
A.iostream
B.cmath
C.cstdio
D.algorithm
6. 寻找最短路径的广度优先搜索算法经常用到的数据结构是?
A.栈
B.链表
C.向量
D.队列
7. 以下哪个域名后缀不属于中华人民共和国管辖?
A.cn
B.uk
C.hk
D.mo
8. 下列排序算法中,平均情况下时间复杂度最小的是?
A.插入排序
B.选择排序
C.归并排序
D.冒泡排序
9. 关于计算机网络,下面的说法中正确的是?
A.TCP是网络层协议
B.计算机病毒只能通过U盘等介质传播,不能通过计算机网络传播
C.计算机网络可以实现资源共享
D.公司内部的几台计算机组成的网络规模太小,不能称为计算机网络
10. 序列(7,5,1,12,3,6,9,4)的逆序对有多少个?
A.15
B.12
C.13
D.14
11. 下列属于图像文件格式的是?
A.MPEG
B.DOCX
C.JPEG
D.WMV
12. 不管P、Q如何取值,以下逻辑表达式中取值恒为假的是?
A.(¬Q∧P)∨(Q∧¬P)
B.((¬P∨Q)∨(P∨¬Q))∧P∧¬Q
C.¬P∧(¬Q∨P)∨(Q∨¬P)∧P
D.((¬P∨Q)∨(Q∨¬P))∧Q∧¬P
13. 树的根结点的高度为1,某完全二叉树有2025个结点,其高度是?
A.10
B.11
C.12
D.13
14. 现有9个苹果,要放入5个不同的盘子,允许有的盘子中放0个苹果,则不同的放法共有多少种?
A.720
B.715
C.126
D.252
15. G是一个非连通无向图(没有重边和自环),共有36条边,则该图至少有多少个顶点?
A.6
B.9
C.10
D.8
二、阅读程序题(共 17 题,判断题正确填√,错误填 ×;判断题每题 1.5 分,选择题每题 3 分,特殊标注除外)
(1)程序如下
#include
using namespace std;
using i64 = long long;

int popcount(i64 x) {
    int res = 0;
    while (x) {
        if (x & 1 == 1) res++;
        x >>= 1;
    }
    return res;
}

int calc(i64 x) {
    int sum = 0;
    for (i64 i = 1; i <= x; i++) sum += popcount(i);
    return sum;
}

int sum(i64 l, i64 r) {
    return calc(r) - calc(l);
}

int main() {
    i64 l, r;
    cin >> l >> r;
    cout << calc(l) << " " << sum(l, r) << endl;
    return 0;
}
16. 判断题:若程序输入为5 8,则程序输出7 6。( )
17. 判断题:若将第11行中的&符号改为^符号,程序输出结果一定不会改变。( )
18. 判断题:若将头文件#include 改成#include ,程序仍能正常运行。( )
19. 选择题:若输入为1 12,则输出是什么?( )
A.1 21
B.1 20
C.1 22
D.2 22
20. 选择题:程序中的sum函数实现了什么功能?( )
A.计算了[1,r]区间内的每个数二进制位上1的个数之和
B.计算了[1,r]区间内的每个数二进制位上0的个数之和
C.计算了(l,r]区间内的每个数二进制位上1的个数之和
D.计算了(l,r]区间内的每个数二进制位上0的个数之和
(2)程序如下
#include
using namespace std;
const int inf = 0x3f3f3f3f;

int solve(vector& cur) {
    int n = cur.size();
    vector> dp(n + 1, vector(n + 1, inf));
    for (int i = 0; i <= n; i++) dp[0][i] = dp[i][0] = 0;
    for (int i = 1; i <= n; i++) dp[i][i] = cur[i - 1];
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            if (i != j) dp[i][j] = min(dp[i][j], dp[i - 1][j] + dp[i][j - 1]);
    int ans = 0;
    for (int i = 1; i <= n; i++) ans = max(ans, dp[n][i]);
    return ans;
}

int main() {
    int n;
    cin >> n;
    vector cost(n);
    for (int i = 0; i < n; i++) cin >> cost[i];
    cout << solve(cost) << endl;
    return 0;
}
21. 判断题:若输入为3 1 2 3,则输出为3。( )
22. 判断题:计算dp数组的时间复杂度为O(n²)。( )
23. 判断题:若将第28行改为vector cost(n+1),则当输入3 1 2 3时,solve函数中的n=3。( )
24. 选择题:当输入的cost数组为{4,0,0,5,6}时,程序的输出为?( )
A.23
B.25
C.24
D.22
25. 选择题:若将第17行改为dp[i][j] = min(dp[i][j], dp[i-1][j] - dp[i][j-1]),则当输入的cost数组为{4,0,0,5,6}时,程序的输出为?( )
A.20
B.21
C.22
D.23
26. 选择题:当输入的cost数组为{4,0,0,5,6}时,在solve函数中,dp[2][3]的值为?( )
A.1
B.2
C.3
D.4
(3) 程序如下
#include
using namespace std;

int func(int a, int b) {
    if (a == 0) return b;
    if (b == 0) return a;
    return a + func(b, a % b);
}

int main() {
    int x, y;
    cin >> x >> y;
    cout << func(x, y) << endl;
    return 0;
}
27. 判断题:当输入为2 3时,程序的输出为5。( )
28. 判断题:若输入只有一个为0,则程序的输出为输入的另一个数字。( )
29. 判断题:当输入为6 8时,func函数将会被进入4次。( )
30. 选择题:当输入为6 8时,程序的输出为?( )
A.20
B.21
C.22
D.23
31. 选择题:当输入为3 5时,func函数的调用顺序是?( )
A.func(3,5)→func(5,3)→func(3,2)→func(2,1)→func(1,0)
B.func(3,5)→func(5,3)→func(3,2)→func(2,1)→func(1,1)→func(1,0)
C.func(3,5)→func(5,2)→func(2,1)→func(1,1)→func(1,0)
D.func(3,5)→func(5,2)→func(2,1)→func(1,0)
32. 选择题:若将第10行的代码改为return a + func(b, a - b),则当输入为3 5时,得到的输出为?( )
A.14
B.8
C.6
D.产生未定义行为,结果未知
 三、完善程序题(共10题,单选题,每小题3分)
(1)题目描述: 
给定一个整数数组colors和一个整数k,其中colors表示一个由红色瓷砖(1)和蓝色瓷砖(0)组成的环。环中连续k块瓷砖的颜色如果是交替颜色(除了第一块和最后一块瓷砖以外,中间瓷砖的颜色与它左边和右边瓷砖的颜色都不同),则称为交替组。请找出交替组的个数。
#include
#include <①>
using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    vector colors(n);
    for (int i = 0; i < n; i++) cin >> colors[i];
    int ans = 0, cnt = ②;
    for (int i = 0; i < ③; i++) {
        if (i > 0 && ④) cnt = 0;
        cnt++;
        ans += (⑤ && cnt >= k);
    }
    cout << ans << endl;
    return 0;
}
33. ①处应填?( )
A.vector
B.set
C.string
D.map
34. ②处应填?( )
A.-1
B.0
C.1
D.2
35. ③处应填?( )
A.n
B.n-1
C.2*n
D.2*(n-1)
36. ④处应填?( )
A.colors[i] = colors[i-1]
B.colors[i] != colors[i-1]
C.colors[i%n] == colors[(i-1)%n]
D.colors[i%n] != colors[(i-1)%n]
37. ⑤处应填?( )
A.i n
B.i = n
C.i n
D.i = n
(2)题目描述: 

在国际象棋中,马的移动为“L”形(垂直2格+水平1格或水平2格+垂直1格)。马只能站在电话垫的数字单元格上(电话垫布局:

1 2 3;

4 5 6;

7 8 9;

*  0 #

从任意数字单元格开始,执行n-1次移动可获得长度为n的号码,计算这样的数字串有多少个(结果对10⁹+7取模)。

#include
using namespace std;

const int mod = 1E9 + 7;
vector> pos = {
    {4,6}, {6,8}, {7,9}, {4,8}, {0,3,9},
    ①, {0,1,7}, {2,6}, {1,3}, {2,4}
};

int main() {
    int n;
    cin >> n;
    vector> dp(10, vector(n + 1, 0));
    for (int i = 0; i < 10; i++) ② = 1;
    for (int j = 2; j <= n; j++) {
        for (int i = 0; i < 10; i++) {
            for (int k = 0; k < pos[i].size(); k++) {
                dp[i][j] += dp[③][j - 1];
                ④;
            }
        }
    }
    int ans = 0;
    for (int i = 0; i < 10; i++) {
        ⑤;
        ans %= mod;
    }
    cout << ans << endl;
    return 0;
}
38. ①处应填?( )
A.{1,3,7,9}
B.{*,#}
C.{2,8,0}
D.{}
39. ②处应填?( )
A.dp[i][1]
B.dp[1][i]
C.dp[i][0]
D.dp[0][i]
40. ③处应填?( )
A.k
B.pos[k][i]
C.pos[i][k]
D.pos[i-1][k]
41. ④处应填?( )
A.dp[i][k] %= mod
B.dp[j][i] -= mod
C.dp[i][j] %= mod
D.dp[i][j] -= mod
42. ⑤处应填?( )
A.ans += dp[i][n]
B.ans += dp[i][n-1]
C.ans += dp[n][i]
D.ans += dp[n-1][i]

52题 | 被引用0次

模板修改
使用此模板创建