信奥刷题站
CSP-J 初赛2024-09

2024年 CSP-J 第一轮(入门级)

题量
42 题
客观题
42 题
建议时长
120 分钟
卷面总分
100 分
开始整卷模拟计时作答 · 交卷即时判分 · 错题自动进错题本(需登录)

// questions

题目预览

单项选择题
1
单选题2

32 位 int 类型的存储范围是( )

A

−2147483647∼+2147483647-2147483647 \sim +21474836472147483647+2147483647

B

−2147483647∼+2147483648-2147483647 \sim +21474836482147483647+2147483648

C

−2147483648∼+2147483647-2147483648 \sim +21474836472147483648+2147483647

D

−2147483648∼+2147483648-2147483648 \sim +21474836482147483648+2147483648

2
单选题2

计算 (148−10102)∗D16−11012(14_8 − 1010_2)* \mathrm{D}_{16} − 1101_2(14810102)D1611012的结果,并选择答案的十进制值:( )

A

13

B

14

C

15

D

16

3
单选题2

某公司有 101010 名员工,分为 333 个部门:A 部门有 444 名员工,B 部门有 333 名员工、C 部门有 333 名员工。现需要从这 101010 名员工中选出 444 名组成一个工作组,且每个部门至少要有 111 人。问有多少种选择方式?( )

A

120

B

126

C

132

D

238

4
单选题2

以下哪个序列对应数字 0 至 7 的 444 位二进制格雷码(Gray code)?

A

0000,0001,0011,0010,0110,0111,0101,10000000, 0001, 0011, 0010, 0110, 0111, 0101, 10000000,0001,0011,0010,0110,0111,0101,1000

B

0000,0001,0011,0010,0110,0111,0100,01010000, 0001, 0011, 0010, 0110, 0111, 0100, 01010000,0001,0011,0010,0110,0111,0100,0101

C

0000,0001,0011,0010,0100,0101,0111,01100000, 0001, 0011, 0010, 0100, 0101, 0111, 01100000,0001,0011,0010,0100,0101,0111,0110

D

0000,0001,0011,0010,0110,0111,0101,01000000, 0001, 0011, 0010, 0110, 0111, 0101, 01000000,0001,0011,0010,0110,0111,0101,0100

5
单选题2

记 1KB 位 1024 字节(byte),1MB 位 1024KB,那么 1MB 是多少二进制位(bit)?

A

100000010000001000000

B

104857610485761048576

C

800000080000008000000

D

838860883886088388608

6
单选题2

以下哪个不是 C++ 中的基本数据类型?

A

int

B

float

C

struct

D

char

7
单选题2

以下哪个不是 C++ 中的循环语句?

A

for

B

while

C

do-while

D

repeat-untill

8
单选题2

在 C/C++中,(char)('a' + 13)与下面的哪一个值相等( )

A

'm'

B

'n'

C

'z'

D

'3'

9
单选题2

假设有序表中有 1000 个元素,则用二分法查找元素 x 最多需要比较( )次

A

252525

B

101010

C

77 7

D

11 1

10
单选题2

下面哪一个不是操作系统名字( )

A

Notepad

B

Linux

C

Windows

D

macOS

11
单选题2

在无向图中,所有顶点的度数之和等于( )

A

图的边数

B

图的边数的两倍

C

图的顶点数

D

图的顶点数的两倍

12
单选题2

已知二叉树的前序遍历为 [A,B,D,E,C,F,G][A,B,D,E,C,F,G][A,B,D,E,C,F,G],中序遍历为 [D,B,E,A,F,C,G][D,B,E,A,F,C,G][D,B,E,A,F,C,G],求二叉树的后序遍历的结果是( )

A

[D,E,B,F,G,C,A][D,E,B,F,G,C,A][D,E,B,F,G,C,A]

B

[D,E,B,F,G,A,C][D,E,B,F,G,A,C] [D,E,B,F,G,A,C]

C

[D,B,E,F,G,C,A][D,B,E,F,G,C,A] [D,B,E,F,G,C,A]

D

[D,B,E,F,G,A,C][D,B,E,F,G,A,C] [D,B,E,F,G,A,C]

13
单选题2

给定一个空栈,支持入栈和出栈操作。若入栈操作的元素依次是 1 2 3 4 5 6,其中 1 最先入栈,6 最后入栈,下面哪种出栈顺序是不可能的( )

A

6 5 4 3 2 1

B

1 6 5 4 3 2

C

2 4 6 5 3 1

D

1 3 5 2 4 6

14
单选题2

555 个男生和 333 个女生站成一排,规定 333 个女生必须相邻,问有多少种不同的排列方式?

A

432043204320

B

50405040 5040

C

36003600 3600

D

28802880 2880

15
单选题2

编译器的主要作用是什么( )?

A

直接执行源代码

B

将源代码转换为机器代码

C

进行代码调试

D

管理程序运行时的内存

阅读程序
16
判断题1
阅读程序代码(共 16-20 题共用)
#include <iostream>
using namespace std;

bool isPrime(int n) {
    if (n <= 1) {
        return false;
    }
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

int countPrimes(int n) {
    int count = 0;
    for (int i = 2; i <= n; i++) {
        if (isPrime(i)) {
            count++;
        }
    }
    return count;
}

int sumPrimes(int n) {
    int sum = 0;
    for (int i = 2; i <= n; i++) {
        if (isPrime(i)) {
            sum += i;
        }
    }
    return sum;
}

int main() {
    int x;
    cin >> x;
    cout << countPrimes(x) << " " << sumPrimes(x) << endl;
    return 0;
}

当输入为 10 时,程序的第一个输出为 4,第二个输出为 17。( )

A

正确

B

错误

17
判断题1

若将 isPrime(i) 函数中的条件改为 i * i <= n / 2,输入 20 时,countPrimes(20) 的输出将变为 6( )

A

正确

B

错误

18
判断题1

sumPrimes 函数计算的是从 2n 之间的所有素数之和( )

A

正确

B

错误

19
单选题3

当输入为 50 时,sumPrimes(50) 的输出为( )

A

1060

B

328

C

381

D

275

20
单选题3

如果将 for (int i = 2; i * i <= n; i++) 改为 for(int i = 2; i <= n; i++),输入 10 时,程序的输出( )

A

将不能正确计算 10 以内素数个数及其和

B

仍然输出 417

C

输出 310

D

输出结果不变,但运行时间更短

21
判断题1
阅读程序代码(共 21-26 题共用)
#include <iostream>
#include <vector>
using namespace std;

int compute(vector<int> &cost) {
    int n = cost.size();
    vector<int> dp(n + 1, 0);
    dp[1] = cost[0];
    for (int i = 2; i <= n; i++) {
        dp[i] = min(dp[i - 1], dp[i - 2]) + cost[i - 1];
    }
    return min(dp[n], dp[n - 1]);
}

int main() {
    int n;
    cin >> n;
    vector<int> cost(n);
    for (int i = 0; i < n; i++) {
        cin >> cost[i];
    }
    cout << compute(cost) << endl;
    return 0;
}

当输入的 cost 数组为 {10,15,20} 时,程序的输出为 15( )

A

正确

B

错误

22
判断题1

如果将 dp[i - 1] 改为 dp[i - 3],程序可能会产生编译错误( )

A

正确

B

错误

23
判断题2

程序总是输出 cost 数组中最小的元素( )

A

正确

B

错误

24
单选题3

当输入的 cost 数组为{1, 100, 1, 1, 1, 100, 1, 1, 100, 1} 时,程序的输出为( )。

A

6

B

7

C

8

D

9

25
单选题4

如果输入的 cost 数组为 {10, 15, 30, 5, 5, 10, 20},程序的输出为( )

A

25

B

30

C

35

D

40

26
单选题3

若将代码中的 min(dp[i - 1], dp[i - 2]) + cost[i - 1] 修改为 dp[i - 1] + cost[i - 2],输入cost 数组为 {5, 10, 15} 时,程序的输出为()

A

10

B

15

C

20

D

25

27
判断题1
阅读程序代码(共 27-32 题共用)
#include <iostream>
#include <cmath>
using namespace std;

int customFunction(int a, int b) {
    if (b == 0) {
        return a;
    }
    return a + customFunction(a , b - 1);
}

int main() {
    int x, y;
    cin >> x >> y;
    int result = customFunction(x, y);
    cout << pow(result, 2) << endl;
    return 0;
}

当输入为 2 3 时,customFunction(2, 3)的返回值为 64。( )

A

正确

B

错误

28
判断题1

b 为负数时,customFunction(a, b) 会陷入无限递归。( )

A

正确

B

错误

29
判断题1

b 的值越大,程序的运行时间越长。( )

A

正确

B

错误

30
单选题3

当输入为 5 4 时,customFunction(5, 4) 的返回值为( )。

A

5

B

25

C

250

D

625

31
单选题3

31.如果输入 x = 3 和 y = 3,则程序的最终输出为( )

A

27

B

81

C

144

D

256

32
单选题4

若将 customFunction 函数改为 return a + customFunction(a - 1, b-1); 并输入 3 3,则程序的最终输出为()。

A

9

B

16

C

25

D

36

完善程序
33
单选题3
阅读程序代码(共 33-37 题共用)
#include<iostream>
#include<vector>
using namespace std;

bool isSquare(int num) {
    int i = ①;
    int bound = ②;
    for (; i <= bound; ++i) {
        if (③) {
            return ④;
        }
    }
    return ⑤;
}

int main() {
    int n;
    cin >> n;
    if (isSquare(n)) {
        cout << n << " is a square number" << endl;
    } else {
        cout << n << " is not a square number" << endl;
    }
    return 0;
}

①处应填()

A

1

B

2

C

3

D

4

34
单选题3

②处应填( )

A

(int)floor(sqrt(num) - 1)

B

(int)floor(sqrt(num))

C

floor(sqrt(num / 2)) - 1

D

floor(sqrt(num / 2))

35
单选题3

③处应填( )

A

num = 2 * i

B

num == 2 * i

C

num = i * i

D

num == i * i

36
单选题3

④处应填( )

A

num = 2 * i

B

num == 2 * i

C

true

D

false

37
单选题3

(1) (判断平方数)问题:给定一个正整数 nnn,判断这个数是不是完全平方数,即存在一个正整数 xxx 使得 xxx 的平方为 nnn

试补全程序。

37.⑤处应填()

A

num = i * i

B

num != i * i

C

true

D

false

38
单选题3
阅读程序代码(共 38-42 题共用)
#include <bits/stdc++.h>
using namespace std;

void move(char src, char tgt) {
    cout << "从柱子" << src << "挪到柱子上" << tgt << endl;
}

void dfs(int i, char src, char tmp, char tgt) {
    if (i == ①) {
        move(②);
        return;
    }
    dfs(i - 1, ③);
    move(src, tgt);
    dfs(⑤, ④);
}

int main() {
    int n;
    cin >> n;
    dfs(n, 'A', 'B', 'C');
}

①处应填()

A

0

B

1

C

2

D

3

39
单选题3

②处应填()

A

src, tmp

B

src, tgt

C

tmp, tgt

D

tgt, tmp

40
单选题3

③处应填()

A

src, tmp, tgt

B

src, tgt, tmp

C

tgt, tmp, src

D

tgt, src, tmp

41
单选题3

④处应填( )

A

src, tmp, tgt

B

tmp, src, tgt

C

src, tgt, tmp

D

tgt, src, tmp

42
单选题3

小圆盘必须始终在大圆盘之上。

A

0

B

1

C

i - 1

D

i