chen_zhe @ 2026-09-19 11:38:35
重要声明:洛谷更新讨论贴内容的时候,不会更新帖子发布时间,不存在 CSP 赛前泄题的情况。
:::info[OCR 版本]
共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项。
下列 C++ 数据类型中,能够精确存储
A. float B. long long C. double D. int
十六进制数 2F5 转换为八进制数是( )。
A. 1364 B. 1635 C. 1405 D. 1365
执行下列 C++ 代码,输出是( )。
int a = 7, b = 3;
std::cout << a / b * b + a % b;
A. 9 B. 10 C. 7 D. 6
初始时栈为空,将 1、2、3、4 依次入栈,入栈过程中允许随时出栈。下列出栈序列中不可能出现的是( )。
A. 2,4,3,1
B. 1,2,3,4
C. 3,1,2,4
D. 1,4,3,2
一棵有 100 个结点的完全二叉树,其叶子结点个数是( )。
A. 49 B. 50 C. 64 D. 51
执行下列代码后 s 的值是( )。
int s = 0;
for (int i = 1; i <= 100; i++)
if (i % 3 == 0 || i % 5 == 0)
s += i;
A. 3048 B. 2733 C. 2318 D. 2418
上楼梯每步可上 1 级、2 级或 3 级,从地面(可视为第 0 级)走到第 8 级台阶共有多少种不同走法( )。
A. 44 B. 121 C. 149 D. 81
下图为 # 为障碍,. 为可通行格:
S..#.
...#.
...#.
##..E
...#.
从 S 出发做广度优先搜索(BFS):初始时把 S 入队;每次取出队首格子,按“上、下、左、右”(上 = 行号减 1,下 = 行号加 1,左 = 列号减 1,右 = 列号加 1)的顺序遍历它的四个相邻格子,越界、障碍或已访问的格子跳过,其余格子标记为已访问并入队。当 E 第一次入队时,已经入队过的格子(含 S 和 E)共有多少个( )。
A. 15 B. 12 C. 14 D. 13
满足
A. 8 B. 6 C. 4 D. 5
某国硬币面值为 1 元、4 元、6 元且数量不限,凑出 9 元最少需要多少枚( )。
A. 3 B. 4 C. 5 D. 2
执行下列代码,输出是( )。
int a[5] = {1, 3, 5, 7, 9};
int *p = a + 2;
*(p - 1) = p[0] + p[2];
p[1] = *(a + 1) - a[0];
cout << a[1] << "," << a[3];
A. 14,13 B. 8,13 C. 14,7 D. 14,2
在含 1000 个互不相同元素的升序数组中,用二分法查找给定值(返回元素位置或报告不存在),最坏情况下需要与数组元素比较多少次( )。
A. 500 B. 9 C. 11 D. 10
数组
A. 252 B. 310 C. 58 D. 61
数轴上有 7 个点,坐标分别为 1、3、4、7、10、15、20。在数轴上选取一个整数坐标点 P,使 P 到这 7 个点的距离之和最小,这个最小距离和是( )。
A. 37 B. 42 C. 40 D. 38
一个无向图有 10 个顶点,其中 4 个顶点的度为 3,其余顶点的度均为 4,则该图的边数是( )。
A. 36 B. 18 C. 17 D. 20
程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ×;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分。
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int x = 1, y = 1;
while (n > 0) {
if (n % 2 == 0) {
++x;
} else {
++x;
++y;
}
n = n / 2;
}
cout << x << ' ' << y << endl;
return 0;
}
识别注:上面第 12 行
++y;被手写笔迹遮盖较重,属于暂恢复内容;不是把旁边的手写修改视作题面。
以下问题均假定输入的
判断题
3 3。( )++x; 删除后,程序输出的两个数一定相等。( )单选题
将第 7 行的 while (n > 0) 改为 while (n >= 0) 后,程序可能出现的问题是( )。
A. 陷入死循环
B. 输出结果比原来大
C. 输出结果比原来小
D. 输出结果不受影响
当输入为 6 时,输出为( )。
A. 3 3 B. 4 2 C. 4 3 D. 5 2
若输入
A. 16 B. 30 C. 31 D. 32
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int a[100007], b[100007], c[100007], carry[100007];
string input_str;
int a_len, b_len;
int main() {
cin >> input_str;
a_len = input_str.size();
for (int i = 0; i < a_len; i++) {
a[i] = input_str[a_len - i - 1] - '0';
}
cin >> input_str;
b_len = input_str.size();
for (int i = 0; i < b_len; i++) {
b[i] = input_str[b_len - i - 1] - '0';
}
carry[0] = 0;
for (int i = 0; i < max(a_len, b_len) + 1; i++) {
c[i] = a[i] + b[i] + carry[i];
if (c[i] >= 10) {
carry[i + 1] = 1;
c[i] -= 10;
} else {
carry[i + 1] = 0;
}
}
for (int i = max(a_len, b_len); i >= 0; i--) {
cout << c[i];
}
cout << endl;
return 0;
}
本题输入的两个数均为非负整数,位数不超过 100000,可能包含前导零。
判断题
123 456 时,程序输出为 0579。( )c[i] = a[i] + b[i]; 后,程序输出的结果一定比原来的结果小。( )单选题
当输入为 12345 678 时,输出为( )。
A. 012923 B. 013023 C. 13023 D. 130230
将第 22 行的 if (c[i] >= 10) 改为 if (c[i] > 10) 后,当输入为 95 15 时,输出为( )。
A. 01010 B. 110 C. 140 D. 1410
假设输入的两个数均为
A. 第一个字符一定不为 '0'
B. 长度一定为
C. 长度一定为 '0'
D. 长度可能为
#include <iostream>
using namespace std;
bool check_prime(int x) {
if (x <= 1) return false;
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) return false;
}
return true;
}
int n;
void search_result(int x) {
if (!check_prime(x)) return;
if (x >= n) {
cout << x << endl;
return;
}
for (int i = 0; i <= 9; i++) {
search_result(x * 10 + i);
}
}
int main() {
cin >> n;
for (int i = 1; i <= 9; i++) search_result(i);
return 0;
}
判断题
for (int i = 0; i <= 9; i++) 改为 for (int i = 1; i <= 9; i += 2) 后,程序的输出结果一定不变。( )单选题
当输入为 24 时,程序输出的第 3 行为( )。
A. 23 B. 29 C. 31 D. 239
下列关于该程序输出的说法中,正确的是( )。
A. 输出的数一定按照从小到大的顺序排列
B. 随着输入
C. 输出的数的个位数字只可能是 3 或 7
D. 输出的每个大于等于 10 的数,十进制下删去它的末位数字后得到的数一定是质数
当输入为 200 时,程序输出的行数为( )。
A. 12 B. 13 C. 14 D. 15
单选题,每小题 3 分,共计 30 分。
给定
输入的第一行依次为
数据满足
以下程序按“逐位除以
#include <iostream>
constexpr int N = 100005;
long long b[N];
int main() {
long long n, m, d;
std::cin >> n >> m >> d;
int len = 1;
for (int i = 0; i < d; i++) {
long long x;
std::cin >> x;
for (int j = len; j >= 1; j--)
b[j] = /* ① */;
b[0] = /* ② */;
len++;
for (int j = 0; j < len; j++)
if (b[j] >= n) {
b[j + 1] += /* ③ */;
b[j] = /* ④ */;
if (j + 1 == len) len++;
}
}
while (/* ⑤ */) len--;
for (int i = len - 1; i >= 0; i--)
std::cout << b[i] << ' ';
return 0;
}
①处应填( )。
A. b[j] * n
B. b[j] * m
C. b[j - 1] * n
D. b[j - 1] * m
②处应填( )。
A. x * n B. x C. 0 D. m
③处应填( )。
A. b[j] / m B. b[j] % n C. b[j] % m D. b[j] / n
④处应填( )。
A. b[j] / m B. b[j] % n C. b[j] % m D. b[j] / n
⑤处应填( )。
A. len > 0 && b[len - 1] == 0
B. len > 0 && b[0] == 0
C. len > 1 && b[len - 1] == 0
D. len > 1 && b[0] == 0
给定一个长度为 016A 表示十进制下的四个数
现在请选择
对于每个
其中 0—9 或 A—F。本题假定字符采用 ASCII 编码。输出答案时保留小数点后 6 位。
以下程序通过递归枚举所有可能的连续分段方案。请补全程序。
#include <algorithm>
#include <iomanip>
#include <iostream>
using namespace std;
constexpr int N = 25;
int n, a[N];
char s[N];
double ans = 1e100;
int value(char c) { return /* ① */; }
void split(int l, int cnt, double mnb, double mxb) {
if (l > n) {
if (cnt == 0) return;
ans = min(ans, mxb - mnb);
return;
}
int sum = 0;
for (/* ② */) {
sum += a[r];
double nwb = /* ③ */;
split(/* ④ */);
}
}
int main() {
cin >> n >> s + 1;
for (int i = 1; i <= n; ++i)
a[i] = value(s[i]);
split(/* ⑤ */);
cout << fixed << setprecision(6) << ans;
①处应填( )。
A. c - (c < '9' ? '0' : 'A' - 10)
B. c - (c < 'A' ? '0' : 'A' - 10)
C. c - (c < 'A' ? 'A' - 10 : '0')
D. c - (c < 'A' ? '0' : 'A' + 10)
②处应填( )。
A. int r = l + 1; r <= n; ++r
B. int r = l; r < n; ++r
C. int r = l; r <= n; r += 2
D. int r = l; r <= n; ++r
③处应填( )。
A. sum / (r - l + 1) * 1.0
B. sum * 1.0 / (r - l) + 1
C. sum * 1.0 / (r - l + 1)
D. (sum - a[r]) * 1.0 / (r - l + 1)
④处应填( )。
A. r + 1, cnt + (r < n), min(mnb, nwb), max(mxb, nwb)
B. r + 1, cnt + (r <= n), min(mnb, nwb), max(mxb, nwb)
C. r + 1, cnt + (r < n), max(mnb, nwb), min(mxb, nwb)
D. r + 1, cnt + (r <= n), max(mnb, nwb), min(mxb, nwb)
⑤处应填( )。
A. 0, 0, 1e100, -1e100
B. 0, 0, -1e100, 1e100
C. 1, 0, -1e100, 1e100
D. 1, 0, 1e100, -1e100
:::
:::info[答案]
| 题号 | 答案 | 题号 | 答案 | 题号 | 答案 |
|---|---|---|---|---|---|
| 1 | B | 6 | D | 11 | A |
| 2 | D | 7 | D | 12 | D |
| 3 | C | 8 | C | 13 | C |
| 4 | C | 9 | B | 14 | A |
| 5 | B | 10 | A | 15 | B |
| 题号 | 答案 | 题号 | 答案 | 题号 | 答案 |
|---|---|---|---|---|---|
| 16 | √ | 22 | √ | 28 | × |
| 17 | × | 23 | × | 29 | √ |
| 18 | √ | 24 | × | 30 | √ |
| 19 | A | 25 | B | 31 | B |
| 20 | C | 26 | A | 32 | D |
| 21 | C | 27 | C | 33 | C |
| 题号 | 答案 | 填入内容 |
|---|---|---|
| 34 | D | b[j - 1] * m |
| 35 | B | x |
| 36 | D | b[j] / n |
| 37 | B | b[j] % n |
| 38 | C | len > 1 && b[len - 1] == 0 |
| 题号 | 答案 | 填入内容 |
|---|---|---|
| 39 | B | c - (c < 'A' ? '0' : 'A' - 10) |
| 40 | D | int r = l; r <= n; ++r |
| 41 | C | sum * 1.0 / (r - l + 1) |
| 42 | A | r + 1, cnt + (r < n), min(mnb, nwb), max(mxb, nwb) |
| 43 | D | 1, 0, 1e100, -1e100 |
:::
DDCDA
CABAD
CCBCB
TTFCBC
TTFBBD
TFFACC
CDBAC
ABDAA,但是第一题也有认为是 C 的,等全卷出来再看。
by ClV_Csy @ 2026-09-19 11:38:46
qp
by yhcorey @ 2026-09-19 11:38:59
qp
by lbbbbbbbb @ 2026-09-19 11:38:59
qp
by UnionRE @ 2026-09-19 11:39:08
bzd
by SunnyFishQwQ @ 2026-09-19 11:39:14
qp
by Bestart @ 2026-09-19 11:39:16
文末换行算不算行
by ridewindHE @ 2026-09-19 11:39:18
CSP-S RP++
by LS20120209 @ 2026-09-19 11:39:20
qp
by liuchijun @ 2026-09-19 11:39:22
rp++
by zengmh @ 2026-09-19 11:39:24
qp