#J0007. CSP-J2025 初赛模拟卷7
CSP-J2025 初赛模拟卷7
CSP-J 2025初赛模拟卷 7
一、单项选择题(共 15 题,每题 2 分,共计 30 分)
第 1 题 十进制数 255 用二进制表示是( )。
{{ select(1) }}
- 10000000101
- 10000010101
- 10000001101
- 10000100101
第 2 题 C++ 语言的创始人是( )。
{{ select(2) }}
- 林纳斯·托瓦茨
- 丹尼斯·里奇
- 吉多·范罗苏姆
- 本贾尼·斯特劳斯特卢普
第 3 题 以下设备中,( )不是输出设备。
{{ select(3) }}
- 扫描仪
- 触摸屏
- 绘图仪
- 音箱
第 4 题 当执行以下 C++ 程序段后输出结果为( )。
char c1 = '2' + 1;
char c2 = '2' + 15;
cout 5 的概率为( )。
{{ select(12) }}
- 3/5
- 1/2
- 2/3
- 1/3
**第 13 题** 四位同学进行篮球传球练习,要求每个人接球后再传给别人。开始时甲同学发球,并作为第一次传球,第五次传球后,球又回到甲同学手中,则不同的传球方法有( )种。
{{ select(13) }}
- 60
- 65
- 70
- 75
**第 14 题** 字符串 "cCCsSsPPP" 共有( )种不同的非空子串。
{{ select(14) }}
- 45
- 36
- 37
- 39
**第 15 题** 向一个栈顶指针为 head 的链式栈中插入一个指针 p 指向的节点时,应执行( )。
{{ select(15) }}
- head->next = p;
- p->next = head; head = p;
- p->next = head->next; head->next = p;
- p->next = head; head = head->next;
## 二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 V,错误填 ×)
### (1)
```cpp
#include
using namespace std;
int t, p, a, b, c;
int f(int a, int b) {
if (a % b == 0)
return 0;
return b - a % b;
}
void solve() {
scanf("%d%d%d%d", &p, &a, &b, &c);
printf("%d\n", min(min(f(p, a), f(p, b)), f(p, c)));
}
int main() {
scanf("%d", &t);
while (t--)
solve();
return 0;
}
判断题
16. 若程序输入
1
2 6 10 9
则最终输出为 4。( )
17. (2分) 若将第 5 行删除,程序的输出结果一定不会改变。( )
18. 若将头文件 改成,程序仍能正常运行。( )
选择题
19. 若程序输入 2954810999,则输出是( )。
{{ select(19) }}
- 18
- 11
- 08
- 01
- (4分) 若将第 10 行的输出内容改为
f(f(f(p, a), b), c),则输入
1 2 6 10 9
时,输出是( )。
{{ select(20) }}
- 3
- 4
- 5
- 6
(2)
#include
using namespace std;
const int N = 2e5 + 5;
int a, b, n, k;
char s[N];
void solve(int a, int b, int k) {
while (k--) {
putchar(a ? '1' : '0');
a ^= 1;
}
}
int main() {
cin >> a >> b >> k;
n = a + b;
for (int i = 1; i k)
--n;
if (n
using namespace std;
const int N = 2e5 + 5;
int n, m, ans, pos[2][N];
char a[N], b[N];
int main() {
scanf("%d%d%s%s", &n, &m, a, b);
reverse(a, a + n);
reverse(b, b + m);
for (int i = 0, now = 0; i
using namespace std;
const int N = 2e5 + 5;
int n, X, a[N], cnt[N], dp[N];
int main() {
cin >> n >> X;
for (int i = 1; i > a[i];
int l = 1, r = 0, sum = 0;
while (l = l; i--)
if (cnt[i] == n + 1)
dp[i] = ④;
sum += dp[i];
}
cout x
- sum x
34. ②处应填( )。
{{ select(34) }}
- sum += a[++r]
- sum += a[r++]
- sum -= a[++r]
- sum -= a[r++]
35. ③处应填( )。
{{ select(35) }}
- sum -= a[r--]
- sum -= a[--r]
- sum -= a[++r]
- sum -= a[r++]
36. ④处应填( )。
{{ select(36) }}
- dp[cnt[i]] + 1
- dp[cnt[i] + 1] + 1
- dp[cnt[i + 1]] + 1
- dp[cnt[i + 1] + 1] + 1
37. ⑤处应填( )。
{{ select(37) }}
- dp[1]
- n - dp[1]
- n * (n + 1) / 2 - sum
- sum
### (2) 题目描述
一个字符串 `s` (`|s|
using namespace std;
const int N = 505;
char s[N];
int n, f[N][N], dp[N][N];
bool check(int l, int r) {
if (①)
return f[l][r];
if (l >= r)
return f[l][r] = 1;
if (s[l] != s[r])
return f[l][r] = 0;
return f[l][r] = ②;
}
int main() {
memset(f, -1, sizeof(f));
scanf("%s", s + 1);
n = strlen(s + 1);
for (int i = 1; i 1
- r - l > 1
39. ②处应填( )。
{{ select(39) }}
- check(l + 1, r - 1)
- check(l + 1, r) + 1
- f[l + 1][r - 1] + 1
- f[l + 1][r] + 1
40. ③处应填( )。
{{ select(40) }}
- dp[i][i] = 1
- dp[i][i + 1] = 1
- dp[i][i + 1] = (s[i] == s[i + 1]) + 2
- dp[i][i + 1] = s[i] == s[i + 1]
41. ④处应填( )。
{{ select(41) }}
- dp[i + 1][j] + dp[i][j - 1] + dp[i + 1][j - 1]
- dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1]
- dp[i + 1][j] + dp[i][j - 1] + (s[i] == s[j])
- dp[i + 1][j] + dp[i][j - 1] - (s[i] == s[j])
42. ⑤处应填( )。
{{ select(42) }}
- dp[i][j] += dp[i + 1][j - 1]
- dp[i][j] += dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1]
- dp[i][j] += dp[i + 1][j] + dp[i][j - 1] + (s[i] == s[j])
- dp[i][j] += dp[i + 1][j] + dp[i][j - 1] - (s[i] == s[j])