#FR2006. CSP 2026 入门级第一轮 模拟卷(二)
CSP 2026 入门级第一轮 模拟卷(二)
第 1 题(2 分)
在 C++ 中,unsigned int 为 位无符号整数。执行 unsigned int u = 0u - 1; cout << u; 后,输出的结果是?
{{ select(1) }}
- 编译错误
第 2 题(2 分)
十六进制数 转换为八进制数是?
{{ select(2) }}
第 3 题(2 分)
执行下列 C++ 代码后,输出的结果是?(char 为 位有符号类型)
char c = 200;
cout << (int)c;
{{ select(3) }}
第 4 题(2 分)
设 int x = 10;,则表达式 x ^ (x >> 1) 的值是?
{{ select(4) }}
第 5 题(2 分)
以下 C++ 程序的输出是?
#include <iostream>
using namespace std;
int main() {
int a = 0, b = 0;
if (a++ > 0 && b++ > 0) {
a = 100;
}
cout << a << b << endl;
return 0;
}
{{ select(5) }}
11100001
第 6 题(2 分)
下列关于 C++ string 的说法,正确的是?
{{ select(6) }}
s.length()的返回值类型是int。- 对于
string s,表达式s + 'a'不合法,无法通过编译。 s.substr(2, 3)返回s中从下标 开始、长度为 的子串。- 两个
string对象用==比较时,比较的是它们在内存中的地址。
第 7 题(2 分)
以下 C++ 程序的输出是?
#include <iostream>
using namespace std;
void f(int &x, int y) {
x = x * 2;
y = y + x;
}
int main() {
int a = 3, b = 4;
f(a, b);
f(b, a);
cout << a << " " << b << endl;
return 0;
}
{{ select(7) }}
3 46 46 812 8
第 8 题(2 分)
把 个相同的小球放入 个不同的盒子,要求每个盒子至少放 个球,共有多少种不同的放法?
{{ select(8) }}
第 9 题(2 分)
某班有 名学生,那么其中至少有多少名学生是在同一个月出生的?(即:无论生日如何分布,都一定存在某个月,出生于该月的学生不少于这个数)
{{ select(9) }}
第 10 题(2 分)
一棵有 个结点的完全二叉树,其深度(规定根结点所在层为第 层)是多少?
{{ select(10) }}
第 11 题(2 分)
中缀表达式 a + b * (c - d) / e 对应的后缀表达式是?
{{ select(11) }}
a b c d - e / * +a b + c d - * e /a b c d * - e / +a b c d - * e / +
第 12 题(2 分)
给定一个初始为空的栈 和一个初始为空的队列 。依次处理整数序列 :若当前数是奇数,则将其压入栈 ;若当前数是偶数,则当 非空时弹出栈顶元素并立即输出,当 为空时把该偶数加入队列 的末尾。序列处理完后,再把 中的元素依次出队并输出。最终输出的序列是?
{{ select(12) }}
第 13 题(2 分)
一个无向简单图有 个顶点,各顶点的度数分别为 ,则该图的边数是?
{{ select(13) }}
第 14 题(2 分)
下列排序算法中,不稳定的是?
{{ select(14) }}
- 冒泡排序
- 插入排序
- 归并排序
- 快速排序
第 15 题(2 分)
已知 ,,且对所有 有 。那么 的值是?
{{ select(15) }}
第 16 题(13 分)
阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 A,错误填 B;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分。题中"第 行"指代码块中从第一行 #include 起算的第 行)
#include <cstdio>
typedef long long ll;
ll power(ll a, ll b, ll p) {
ll r = 1;
a %= p;
while (b > 0) {
if (b & 1) r = r * a % p;
a = a * a % p;
b >>= 1;
}
return r;
}
int main() {
ll a, b, p;
scanf("%lld%lld%lld", &a, &b, &p);
printf("%lld\n", power(a, b, p));
return 0;
}
假设输入满足 ,,。
判断题
16.( 分)当输入为 2 10 1000 时,程序输出 。( )
{{ select(16) }}
- T
- F
- 当输入的 时,无论 和 在给定范围内取何值,程序都输出 。( )
{{ select(17) }}
- T
- F
- 若把程序中所有的
ll都改为int(并相应地把%lld改为%d),则在给定的输入范围内程序的输出不受影响。( )
{{ select(18) }}
- T
- F
单选题
- 当输入为
3 100 7时,输出为( )。 {{ select(19) }}
- 当 时,第 行
while循环的循环体共执行了( )次。 {{ select(20) }}
- 若删去第 行
a %= p;,则在给定的输入范围内,程序( )。 {{ select(21) }}
- 输出一定不变
- 输出可能改变,但不会发生溢出
- 可能因乘法溢出而输出错误结果
- 一定陷入死循环
第 17 题(13.5 分)
#include <cstdio>
const int P = 1000000007;
int n, m;
int g[1007][1007];
long long f[1007][1007];
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
scanf("%d", &g[i][j]);
f[0][1] = 1;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
if (g[i][j] == 1) f[i][j] = 0;
else f[i][j] = (f[i - 1][j] + f[i][j - 1]) % P;
}
}
printf("%lld\n", f[n][m]);
return 0;
}
程序读入一个 行 列的网格(),g[i][j] = 1 表示格子 是障碍,g[i][j] = 0 表示可以通行。从左上角 出发,每步只能向右或向下走一格,求走到右下角 的路径条数对 取模的结果。
判断题
- 当输入为
3 3且 个格子全为 时,输出为 。( )
{{ select(22) }}
- T
- F
- 若删去第 行中的
% P,则在给定的输入范围内,程序的输出不会改变。( )
{{ select(23) }}
- T
- F
- 将第 行改为
f[1][0] = 1;,则对任意输入,程序的输出都不变。( )
{{ select(24) }}
- T
- F
单选题
- 当输入为
3 4、0 0 0 0、0 1 1 0、0 0 0 0时,输出为( )。 {{ select(25) }}
- 程序运行结束后,下列说法一定正确的是( )。 {{ select(26) }}
- 对所有 ,,都有 。
- 若输出为 ,则起点 或终点 必为障碍。
- 对所有 ,都有 。
- 若某一行的格子全是障碍,则输出一定为 。
- 将第 、 行两层循环的顺序交换(外层枚举 从 到 ,内层枚举 从 到 ,循环体不变),则程序的输出( )。 {{ select(27) }}
- 与原来相同
- 可能比原来大
- 可能比原来小
- 程序可能陷入死循环
第 18 题(13.5 分)
#include <cstdio>
#include <cstring>
#include <stack>
char s[100007];
int main() {
scanf("%s", s);
int n = strlen(s);
std::stack<int> st;
st.push(-1);
int ans = 0, cnt = 0;
for (int i = 0; i < n; ++i) {
if (s[i] == '(') {
st.push(i);
} else {
if (st.top() != -1 && s[st.top()] == '(') {
st.pop();
++cnt;
if (i - st.top() > ans) ans = i - st.top();
} else {
st.push(i);
}
}
}
printf("%d %d\n", ans, cnt);
return 0;
}
假设输入的字符串只包含字符 ( 和 ),长度 满足 。
判断题
- 当输入为
(()())时,输出为6 3。( )
{{ select(28) }}
- T
- F
- 若将第 行的条件改为
s[st.top()] == '('(删去st.top() != -1 &&),则当输入以)开头时,程序会访问s[-1],属于数组越界。( )
{{ select(29) }}
- T
- F
- 对任意输入,输出的第二个数
cnt总等于第一个数ans的一半。( )
{{ select(30) }}
- T
- F
单选题
- 当输入为
)()())(()时,输出为( )。 {{ select(31) }}
4 26 34 32 3
- 该程序的时间复杂度为( )。 {{ select(32) }}
- 程序运行结束时,栈
st中的元素个数(含最初压入的 )为( )。 {{ select(33) }}
第 19 题(15 分)
三、完善程序(单选题,每小题 3 分,共计 30 分)
(1)(约数个数)给定正整数 (),求 的正约数个数。
程序思路:对 做质因数分解 ,则约数个数为 。从 开始试除,每找到一个质因数 就把它从 中除尽并统计次数 cnt;试除只需进行到 ,结束后若 仍大于 ,说明剩下的 本身是一个质因数(指数为 )。例如输入 12 输出 6,输入 1 输出 1,输入 97 输出 2。试补全程序。
#include <iostream>
using namespace std;
int main() {
long long n;
cin >> n;
long long ans = 1;
for (long long i = 2; __①__; ++i) {
if (__②__) {
int cnt = 0;
while (n % i == 0) {
++cnt;
__③__;
}
ans = __④__;
}
}
if (__⑤__) ans *= 2;
cout << ans << endl;
return 0;
}
- ①处应填( ) {{ select(34) }}
i * i < ni * i <= ni < ni * i <= n / 2
- ②处应填( ) {{ select(35) }}
n % i == 0i % n == 0n / i == 0n % i != 0
- ③处应填( ) {{ select(36) }}
n -= in = n % in /= ii /= n
- ④处应填( ) {{ select(37) }}
ans * cntans * (cnt + 1)ans + cnt + 1ans * 2
- ⑤处应填( ) {{ select(38) }}
n == 1n > 0ans > 1n > 1
第 20 题(15 分)
(2)(木材切割)有 根木材,第 根长度为 (,,均为整数)。现在要把它们切成长度相等的整数长度木段,至少得到 段()。每根木材可以切出若干段,剩余的部分丢弃。求满足要求的木段长度的最大值;若连长度为 都无法切出 段,输出 。例如输入 3 7 与 232 124 456 时输出 114。
程序思路:木段长度越短,能切出的段数越多,因此答案具有单调性。在 内二分答案:函数 check(len) 计算长度为 len 时总共能切出多少段;若段数不少于 ,说明 len 可行,记录答案并尝试更大的长度,否则尝试更小的长度。试补全程序。
#include <iostream>
using namespace std;
int n, k;
long long a[100007];
long long check(long long len) {
long long cnt = 0;
for (int i = 1; i <= n; ++i) cnt += __①__;
return cnt;
}
int main() {
cin >> n >> k;
long long mx = 0;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
if (a[i] > mx) mx = a[i];
}
long long l = 1, r = mx, ans = 0;
while (__②__) {
long long mid = __③__;
if (__④__) {
ans = mid;
l = mid + 1;
} else {
__⑤__;
}
}
cout << ans << endl;
return 0;
}
- ①处应填( ) {{ select(39) }}
a[i] % lenlen / a[i]a[i] / lena[i] - len
- ②处应填( ) {{ select(40) }}
l <= rl < rl != rl >= r
- ③处应填( ) {{ select(41) }}
(l + r) / 2 + 1(l + r) / 2(r - l) / 2l + r
- ④处应填( ) {{ select(42) }}
check(mid) <= kcheck(mid) == kcheck(mid) > kcheck(mid) >= k
- ⑤处应填( ) {{ select(43) }}
r = midl = midr = mid - 1r = mid + 1