#YHCSPJ0004. CSP-J模拟卷4
CSP-J模拟卷4
一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项)
- 以下不能用 ASCII 码表示的字符是( )。{{ select(1) }}
@
➀
^
~
- 以下描述正确的是( )。{{ select(2) }}
- 在 CSP-J 中,认证选手可以携带字典和词典
- CSP-J 的认证选手可携带已关机的手机放在自己身边的包里
- CSP-J 的认证选手在认证时间内上厕所的时候可携带手机
- CSP-J 全称是 CCF CSP 非专业级别的能力认证入门级
- 以下哪个名字可以用做 C++ 程序中的变量名?( )。{{ select(3) }}
python
new
class
public
- 现在有表示 CSP-J/S 考试日期的整型变量
testday = 20240921
,下面能得到月份数值 9 的代码是( )。{{ select(4) }}
testday / 1000 % 100
testday / 100 % 1000
testday / 100 % 100
testday % 100 / 100
- 小明和小杨轮流掷硬币(假设每次掷硬币都符合古典概率模型,每次掷硬币正面朝上和反面朝上的概率都是 1/2 ),小明先掷,如果谁先掷到正面算谁赢。请问小明赢的概率是( )。{{ select(5) }}
- 2/3
- 1/2
- 1/3
- 3/4
- 小明用递归的方法写了一个关于汉诺塔的程序。能够描述递归过程的数据结构是( )。{{ select(6) }}
- 堆
- 栈
- 链表
- 队列
- 堆排序在最坏情况下运行的时间复杂度是( )。{{ select(7) }}
- 设变量
s
为double
型且已赋值,下列哪条语句能将s
中的数值保留到小数点后一位,并将第二位四舍五入?( )。{{ select(8) }}
s = (s * 10 + 0.5) / 10.0
s = s * 10 + 0.5 / 10.0
s = (s / 10 + 0.5) * 10.0
s = (int)(s * 10 + 0.5) / 10.0
- 关于计算机网络,下面的说法哪些是正确的?( )。{{ select(9) }}
- TCP 协议对应数据链路层
- IP 协议对应传输层
- HTTP 协议对应应用层
- 接入互联网的计算机的 IP 地址已经大部分从 IPv5 升级到了 IPv6 地址
- 以下哪个不是 C++ 里面的循环语句?( )。{{ select(10) }}
while
do
……while
for
switch
……case
- 若整型变量
n
的值为 25,则表达式n&(n+1>>1)
的值为( )。{{ select(11) }}
- 25
- 26
- 9
- 16
- 以下逻辑表达式里,不管 A, B 如何取值,恒为真的是?( )。{{ select(12) }}
- 已知一棵完全二叉树共有 2024 个节点,则其叶节点数量为( )个。{{ select(13) }}
- 1011
- 1012
- 1013
- 1014
- 将 1, 2, 3, 4, 5, 6, 7 这 7 个数字排成一排,则保证每一对相邻数字都互质的排法共有( )种。{{ select(14) }}
- 576
- 864
- 720
- 840
- 假设 G 是一张有 n 个点 m 条边的连通图,小明想将其变成一棵 n 个节点的树,必须删去( )条边才能将其变成这样的一棵树?{{ select(15) }}
- 1
二、阅读程序(程序输入不超过数组或字符串定义的范围;每题有且仅有一个正确选项,除特殊说明外,每题 3 分,共计 40 分)
(一)
01 #include<bits/stdc++.h>
02
03 using namespace std;
04
05 unsigned int ksm(unsigned int x, unsigned int y)
06 {
07 unsigned int ans=1;
08 while(y)
09 {
10 if(y&1) ans=ans*x;
11 y>>=1;
12 x=x*x;
13 }
14 return ans;
15 }
16
17 int main()
18 {
19 int x, y;
20 cin >> x >> y;
21 cout << (int)(ksm(x,y)) << '\n';
22 }
- 时间复杂度是 。( ){{ select(16) }}
- 正确
- 错误
- 空间复杂度是 。( ){{ select(17) }}
- 正确
- 错误
- (2 分)如果进入
ksm
函数,则程序第 10 行代码最少执行 1 次。( ){{ select(18) }}
- 正确
- 错误
- (2 分)如果
x
为 0,则输出恒为 0。( ){{ select(19) }}
- 正确
- 错误
- 若输入数据为
5 3
,则输出为( )。{{ select(20) }}
1
5
25
125
- 若输入数据为
2 31
,则输出为( )。{{ select(21) }}
1073741824
2147483648
-1
-2147483648
(二)
01 #include<bits/stdc++.h>
02
03 using namespace std;
04
05 int mwm(int x)
06 {
07 int ans=0;
08 if(x==1) return 1;
09 for(int i=2;i*i<=x;i++)
10 {
11 if(x%i==0) ; else continue;
12 ans += mwm(i)+mwm(x/i);
13 }
14 return ans+x+1;
15 }
16
17 int main()
18 {
19 int x;
20 cin>>x;
21 cout<<mwm(x)<<'\n';
22 }
- (2 分)存在一组输入,使得程序输出为
0
。( ){{ select(22) }}
- 正确
- 错误
- (2 分)存在一组输入,使得程序输出为
1
。( ){{ select(23) }}
- 正确
- 错误
- (2 分)第 11 行是为了排除
i
不是x
因数的情况,只有当i
是x
因数时才会执行第 12 行。( ){{ select(24) }}
- 正确
- 错误
- 若输入
5
,则程序输出为( )。{{ select(25) }}
0
1
5
6
- 若输入
18
,则程序输出为( )。{{ select(26) }}
53
54
58
59
- 在数据范围内,有多少个
mwm(x) = x+1
?( ){{ select(27) }}
- 7
- 8
- 9
- 10
(三)
01 #include<cstdio>
02 typedef long long LL;
03 const int M = 1e3 + 5;
04
05 int n;
06
07 LL b[M], ans;
08
09 int main() {
10 scanf("%d", &n);
11 if (((1 + n) * n / 2) & 1) puts("0");
12 else {
13 for (int i = 0; i < (1 << (n / 2)); ++i) {
14 int cur = 0;
15 for (int j = 0; (i >> j) > 0; ++j) if ((i >> j) & 1) cur += (j + 1);
16 b[cur]++;
17 }
18 for (int i = 0; i < (1 << (n - n / 2)); ++i) {
19 int cur = 0;
20 for (int j = 0; (i >> j) > 0; ++j) if ((i >> j) & 1) cur += (j + n / 2 + 1);
21 if ((1 + n) * n / 4 >= cur)
22 ans += b[(1 + n) * n / 4 - cur];
23 }
24 printf("%lld\n", ans / 2);
25 }
26 return 0;
27 }
- (2 分)第 11 行是否输出
0
取决于(1+n)*n/2
的奇偶性。( ){{ select(28) }}
- 正确
- 错误
- (2 分)在程序运行的任意时刻,
b
数组一定全部是偶数。( ){{ select(29) }}
- 正确
- 错误
- (2 分)此题目时间复杂度为 。( ){{ select(30) }}
- 正确
- 错误
- 若输入
7
,那么输出结果是( )。{{ select(31) }}
1
2
3
4
- 程序输入 5 以内的整数,则输出的和是( )。{{ select(32) }}
- 0
- 1
2
3
三、完善程序(单选题,每小题 3 分,共计 30 分)
(一)
给定一行句子,每个词之间用空格隔开,要么是全小写英文单词,要么是全大写英文单词,要么是自然数。要求将这些单词倒序输出。而且对于每个单词,如果是小写词,应当转为大写;如果是大写词,应当转为小写;如果是自然数,应该倒转输出。
01 #include<bits/stdc++.h>
02
03 using namespace std;
04
05 int n;
06 string s[1007];
07
08 int main() {
09 while(cin >> s[++n]);
10 ➀;
11 for(int i = n; i >= 1; i--) {
12 for(int j = 0; j < (int)s[i].size(); j++) {
13 if(➁) s[i][j] -= ➂;
14 else if(s[i][j] >= 'A' && s[i][j] <= 'Z') s[i][j] -= ➃;
15 }
16 if(s[i][0] >= '0' && s[i][0] <= '9')
17 for(➄) cout << s[i][j];
18 else cout << s[i];
19 if(i != 1) cout << " ";
20 }
21 }
- ➀处应填( )。{{ select(33) }}
- 不填写
n--
n++
s[n]=0
- ➁处应填( )。{{ select(34) }}
s[i][j] >= 'z' && s[i][j] <= 'a'
s[i][j] <= 'a' && s[i][j] >= 'z'
s[i][j] >= 'a' && s[i][j] <= 'z'
s[i][j] >= 'z' && s[i][j] >= 'z'
- ➂处应填( )。{{ select(35) }}
'a' - 'A'
'a' + 'A'
'A' - 'a'
'A' + 'a'
- ➃处应填( )。{{ select(36) }}
'a' - 'A'
'a' + 'A'
'A' - 'a'
'A' + 'a'
- ➄处应填( )。{{ select(37) }}
int j = (int)s[i].size() - 1; j >= 0; j--
int j = (int)s[i].size(); j >= 0; j--
j = (int)s[i].size() - 1; j >= 0; j--
j = (int)s[i].size(); j >= 0; j--
(二)
在一个餐馆中,有一台空调,每分钟可以选择上调 1 个单位的温度、下调 1 个单位的温度,或者保持不变。初始温度为 m。餐馆有 n 位食客,每位食客在时间点到达,他们能适应的最低温度是,最高温度是。每位食客只会在时刻逗留。如果温度不在食客的适应范围内,他们就会感到不舒服。请判断空调能否调整温度,使得所有食客都感到舒服。
01 #include <cstdio>
02 #include <algorithm>
03 #define N 105
04
05 struct node {
06 int t, l, r;
07 } a[N];
08
09 inline bool cmp(const node &x, const node &y) { ➀ }
10
11 int main() {
12 int T;
13 scanf("%d", &T);
14 while (T--) {
15 int n, m;
16 scanf("%d%d", &n, &m);
17 for(int i = 1; i <= n; ++i) scanf("%d%d%d", &a[i].t, &a[i].l, &a[i].r);
18 std::sort(➁);
19 int l = m, r = m;
20 int fail = 0;
21 for (int i = 1; i <= n; ++i) {
22 ➂
23 if (l > a[i].r || r < a[i].l) {
24 ➃;
25 break;
26 }
27 ➄
28 }
29 if (fail) puts("NO");
30 else puts("YES");
31 }
32 return 0;
33 }
- ➀处应填( )。{{ select(38) }}
return x.t < y.t;
return x.r < y.r;
return x.l < y.l;
return x < y;
- ➁处应填( )。{{ select(39) }}
a + 1, a + n, cmp
a + 1, a + n + 1, cmp
a, a + n + 1
a, a + n
- ➂处应填( )。{{ select(40) }}
l += a[i].t - a[i - 1].t + 1, r -= a[i].t - a[i - 1].t + 1;
l -= a[i].t - a[i - 1].t + 1, r += a[i].t - a[i - 1].t + 1;
l += a[i].t - a[i - 1].t, r -= a[i].t - a[i - 1].t;
l -= a[i].t - a[i - 1].t, r += a[i].t - a[i - 1].t;
- ➃处应填( )。{{ select(41) }}
l=a[i].l
r=a[i].r
fail=0
fail=1
- ➄处应填( )。{{ select(42) }}
l = std::max(l, a[i].l); r = std::min(r, a[i].r);
l = std::min(l, a[i].l); r = std::max(r, a[i].r);
l = std::max(l, l - a[i].l); r = std::min(r, r + a[i].r);
l = std::min(l, l + a[i].l); r = std::max(r, r - a[i].r);