2024年 CSP-J 第一轮(入门级)
// questions
题目预览
32 位 int 类型的存储范围是( )
−2147483647∼+2147483647-2147483647 \sim +2147483647−2147483647∼+2147483647
−2147483647∼+2147483648-2147483647 \sim +2147483648−2147483647∼+2147483648
−2147483648∼+2147483647-2147483648 \sim +2147483647−2147483648∼+2147483647
−2147483648∼+2147483648-2147483648 \sim +2147483648−2147483648∼+2147483648
计算 (148−10102)∗D16−11012(14_8 − 1010_2)* \mathrm{D}_{16} − 1101_2(148−10102)∗D16−11012的结果,并选择答案的十进制值:( )
13
14
15
16
某公司有 101010 名员工,分为 333 个部门:A 部门有 444 名员工,B 部门有 333 名员工、C 部门有 333 名员工。现需要从这 101010 名员工中选出 444 名组成一个工作组,且每个部门至少要有 111 人。问有多少种选择方式?( )
120
126
132
238
以下哪个序列对应数字 0 至 7 的 444 位二进制格雷码(Gray code)?
0000,0001,0011,0010,0110,0111,0101,10000000, 0001, 0011, 0010, 0110, 0111, 0101, 10000000,0001,0011,0010,0110,0111,0101,1000
0000,0001,0011,0010,0110,0111,0100,01010000, 0001, 0011, 0010, 0110, 0111, 0100, 01010000,0001,0011,0010,0110,0111,0100,0101
0000,0001,0011,0010,0100,0101,0111,01100000, 0001, 0011, 0010, 0100, 0101, 0111, 01100000,0001,0011,0010,0100,0101,0111,0110
0000,0001,0011,0010,0110,0111,0101,01000000, 0001, 0011, 0010, 0110, 0111, 0101, 01000000,0001,0011,0010,0110,0111,0101,0100
记 1KB 位 1024 字节(byte),1MB 位 1024KB,那么 1MB 是多少二进制位(bit)?
100000010000001000000
104857610485761048576
800000080000008000000
838860883886088388608
以下哪个不是 C++ 中的基本数据类型?
int
float
struct
char
以下哪个不是 C++ 中的循环语句?
for
while
do-while
repeat-untill
在 C/C++中,(char)('a' + 13)与下面的哪一个值相等( )
'm'
'n'
'z'
'3'
假设有序表中有 1000 个元素,则用二分法查找元素 x 最多需要比较( )次
252525
101010
77 7
11 1
下面哪一个不是操作系统名字( )
Notepad
Linux
Windows
macOS
在无向图中,所有顶点的度数之和等于( )
图的边数
图的边数的两倍
图的顶点数
图的顶点数的两倍
已知二叉树的前序遍历为 [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],求二叉树的后序遍历的结果是( )
[D,E,B,F,G,C,A][D,E,B,F,G,C,A][D,E,B,F,G,C,A]
[D,E,B,F,G,A,C][D,E,B,F,G,A,C] [D,E,B,F,G,A,C]
[D,B,E,F,G,C,A][D,B,E,F,G,C,A] [D,B,E,F,G,C,A]
[D,B,E,F,G,A,C][D,B,E,F,G,A,C] [D,B,E,F,G,A,C]
给定一个空栈,支持入栈和出栈操作。若入栈操作的元素依次是 1 2 3 4 5 6,其中 1 最先入栈,6 最后入栈,下面哪种出栈顺序是不可能的( )
6 5 4 3 2 1
1 6 5 4 3 2
2 4 6 5 3 1
1 3 5 2 4 6
有 555 个男生和 333 个女生站成一排,规定 333 个女生必须相邻,问有多少种不同的排列方式?
432043204320 种
50405040 5040 种
36003600 3600 种
28802880 2880 种
编译器的主要作用是什么( )?
直接执行源代码
将源代码转换为机器代码
进行代码调试
管理程序运行时的内存
阅读程序代码(共 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。( )
正确
错误
若将 isPrime(i) 函数中的条件改为 i * i <= n / 2,输入 20 时,countPrimes(20) 的输出将变为 6( )
正确
错误
sumPrimes 函数计算的是从 2 到 n 之间的所有素数之和( )
正确
错误
当输入为 50 时,sumPrimes(50) 的输出为( )
1060
328
381
275
如果将 for (int i = 2; i * i <= n; i++) 改为 for(int i = 2; i <= n; i++),输入 10 时,程序的输出( )
将不能正确计算 10 以内素数个数及其和
仍然输出 4 和 17
输出 3 和 10
输出结果不变,但运行时间更短
阅读程序代码(共 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( )
正确
错误
如果将 dp[i - 1] 改为 dp[i - 3],程序可能会产生编译错误( )
正确
错误
程序总是输出 cost 数组中最小的元素( )
正确
错误
当输入的 cost 数组为{1, 100, 1, 1, 1, 100, 1, 1, 100, 1} 时,程序的输出为( )。
6
7
8
9
如果输入的 cost 数组为 {10, 15, 30, 5, 5, 10, 20},程序的输出为( )
25
30
35
40
若将代码中的 min(dp[i - 1], dp[i - 2]) + cost[i - 1] 修改为 dp[i - 1] + cost[i - 2],输入cost 数组为 {5, 10, 15} 时,程序的输出为()
10
15
20
25
阅读程序代码(共 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。( )
正确
错误
当 b 为负数时,customFunction(a, b) 会陷入无限递归。( )
正确
错误
当 b 的值越大,程序的运行时间越长。( )
正确
错误
当输入为 5 4 时,customFunction(5, 4) 的返回值为( )。
5
25
250
625
31.如果输入 x = 3 和 y = 3,则程序的最终输出为( )
27
81
144
256
若将 customFunction 函数改为 return a + customFunction(a - 1, b-1); 并输入 3 3,则程序的最终输出为()。
9
16
25
36
阅读程序代码(共 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;
}
①处应填()
1
2
3
4
②处应填( )
(int)floor(sqrt(num) - 1)
(int)floor(sqrt(num))
floor(sqrt(num / 2)) - 1
floor(sqrt(num / 2))
③处应填( )
num = 2 * i
num == 2 * i
num = i * i
num == i * i
④处应填( )
num = 2 * i
num == 2 * i
true
false
(1) (判断平方数)问题:给定一个正整数 nnn,判断这个数是不是完全平方数,即存在一个正整数 xxx 使得 xxx 的平方为 nnn。
试补全程序。
37.⑤处应填()
num = i * i
num != i * i
true
false
阅读程序代码(共 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');
}
①处应填()
0
1
2
3
②处应填()
src, tmp
src, tgt
tmp, tgt
tgt, tmp
③处应填()
src, tmp, tgt
src, tgt, tmp
tgt, tmp, src
tgt, src, tmp
④处应填( )
src, tmp, tgt
tmp, src, tgt
src, tgt, tmp
tgt, src, tmp
小圆盘必须始终在大圆盘之上。
0
1
i - 1
i