CSP-J初赛模拟卷(十二)
該比賽已結束,您無法在比賽模式下遞交該題目。您可以點選“在題庫中開啟”以普通模式檢視和遞交本題。
CSP-J 初赛模拟卷12
一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)
- 一棵完全二叉树的结点总数为 ,其叶结点数为( )。
{{ select(1) }}
- 18个
- 20个
- 21个
- 19个
- C++ 程序运行时,是在哪个存储器上进行的?( )
{{ select(2) }}
- RAM
- ROM
- CACHE
- 硬盘
- 下列不同进制的数中,最大的一个数是( )。
{{ select(3) }}
- 八进制数
- 二进制数
- 十进制数
- 十六进制数
- 一棵树 有 个度数为 的结点、有 个度数为 的结点、有 个度数为 的结点,那么树 有( )个树叶。
{{ select(4) }}
- 18
- 14
- 6
- 7
- 定义一种字符串操作,一次可以将其中一个元素移到任意位置。举例说明,对于字符串 “BCA” 可以将 “A” 移到 “B” 之前,变字符串 “ABC”,如果要将字符串“DACHEBGIF” 变成 “ABCDEFGHI” 最少需要( )次操作。
{{ select(5) }}
- 6
- 5
- 4
- 7
- 计划展出 幅不同的画,其中 幅水彩画、 幅油画、 幅国画,排成一行陈列,要求同一品种的画必须连在一起,并且水彩画不放在两端,那么不同的陈列方式有( )种。
{{ select(6) }}
- 5760
- 2880
- 17280
- 8640
- 在高速缓存系统中,主存容量为 ,Cache 容量为 ,则该存储系统的容量为()
{{ select(7) }}
- 12 MB + 400 KB
- 12 MB
- 12 MB - 12MB + 400 KB
- 12 MB - 400 KB
- 在非空的双向链表中由 所指向的结点右边插入一个由 所指向的结点,其动作依次为:
p->left = q; p->right = q->right; q->right=p;()。
{{ select(8) }}
q->left = pq->right->left = pp->right->left = pp->left->left = p
- 一个自然数在十进制下有 位,则它在二进制下的位数与() 最接近。
{{ select(9) }}
- 十进制表达式 的结果以二进制形式表示为()。
{{ select(10) }}
- 以下关于个人计算机操作系统的说法正确的是( )。
{{ select(11) }}
- Bill Gates ,他创办的 Microsoft 公司开发了 Linux 系列系统
- Steve Jobs,他的苹果公司开发了 IOS 系统
- 目前 Linux 和 Windows 系统都是开源的,网上都能搜索并下载
- Unix 不是操作系统
- 一篇文章有 个中文字符, 个英文字符, 个半角空格,如果只考虑存储这些文字本身需要( )个字节。
{{ select(12) }}
- 470 字节
- 270 字节
- 400 字节
- 320 字节
- 计算机直接识别和执行的语言是()。
{{ select(13) }}
- C++
- 汇编语言
- 高级语言
- 机器语言
- 现代普通计算机的网关不能设置为( )。
{{ select(14) }}
168.10.7.10010.16.13.100234.123.6.5127.0.0.1
- 假设我们用 d=(a1,a2....,a5), 表示无向图 G 的 个顶点的度数,下面给出的哪组 d 值合理( )。
{{ select(15) }}
- {1, 2, 2, 1, 1}
- {5, 4, 3, 2, 1}
- {2, 2, 2, 2, 2}
- {3, 3, 3, 2, 2}
二、阅读程序(程序输入不超过数组或字符串定义的范围;其中判断题1.5分,第5题分别为3,3,4分,第6题分别为4,4,4分,共计40分)
第一题
#include <iostream>
using namespace std;
int main() {
const int SIZE = 100;
int height[SIZE], num[SIZE], n, ans;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> height[i];
num[i] = 1;
for (int j = 0; j < i; j++) {
if ((height[j] < height[i]) && (num[j] >= num[i]))
num[i] = num[j] + 1;
}
}
ans = 0;
for (int i = 0; i < n; i++) {
if (num[i] > ans) ans = num[i];
}
cout << ans << endl;
return 0;
}
n最大可以为99才能保证程序不会出错误。( )
{{ select(16) }}
- 正确
- 错误
- 程序功能:输入长度为
n的整数序列,求最长上升子序列的长度。( )
{{ select(17) }}
- 正确
- 错误
- 若将第 10 行的
j < i改为j <= i,程序运行时会发生错误。( )
{{ select(18) }}
- 正确
- 错误
- 本程序的时间复杂度为 。( )
{{ select(19) }}
- 正确
- 错误
- 若输入
6
2 5 3 11 12 4
则输出为( )
{{ select(20) }}
- 3
- 4
- 2
- 5
- 若输入
5
2 3 4 5 6
则第 12 行 num[i] = num[j] + 1; 执行( )次。
{{ select(21) }}
- 6
- 8
- 10
- 12
第二题
#include<bits/stdc++.h>
using namespace std;
const int mod = 2048;
long long c, n;
long long kasumi(long long x, long long mi) {
long long res = 1;
while (mi) {
if (mi & 1) {
res = (res * x) % mod;
}
x = (x * x) % mod;
mi >>= 1;
}
return res;
}
int main() {
cin >> n >> c;
if (n == 3) {
printf("%lld", c * (c - 1));
return 0;
}
long long ans = ((kasumi(c - 1, n) + (c - 1) * kasumi(-1, n))
% mod + mod) % mod;
cout << ans;
return 0;
}
- 将第
9行res = (res * x) % mod;和第11行x = (x * x) % mod;的括号去掉,程序输出结果一定不变。( )
{{ select(22) }}
- 正确
- 错误
- 将第
12行的mi >>= 1改为mi /= 2,程序输出结果一定不变。( )
{{ select(23) }}
- 正确
- 错误
- 若输入为
4 4,则输出为78。( )
{{ select(24) }}
- 正确
- 错误
- 此程序的时间复杂度为 。
{{ select(25) }}
- 正确
- 错误
- 若输入为
3 4,则输出为( )。
{{ select(26) }}
- 18
- 19
- 12
- 8
kasumi(2046, 13)的返回值为( )。
{{ select(27) }}
- 2024
- 2
- 0
- 2022
第三题
#include<cstdio>
int n, r, num[10000];
bool mark[10000];
void print() {
for (int i = 1; i <= r; i++)
printf("%d ", num[i]);
printf("\n");
}
void search(int x) {
for (int i = 1; i <= n; i++)
if (!mark[i]) {
num[x] = i;
mark[i] = true;
if (x == r) print();
search(x + 1);
mark[i] = false;
}
}
int main() {
scanf("%d%d", & n, & r);
search(1);
return 0;
}
- 若
n < r,则程序无输出。( )
{{ select(28) }}
- 正确
- 错误
- 程序结束时,对任意 ,
mark[i] == 0。( )
{{ select(29) }}
- 正确
- 错误
- 此程序的时间复杂度为 。( )
{{ select(30) }}
- 正确
- 错误
- 若输入为
4 3,则输出中数字1和2的个数不同。( )
{{ select(31) }}
- 正确
- 错误
- 若输入为
6 3,则函数print的执行次数为( )。
{{ select(32) }}
- 60
- 120
- 6
- 720
- 若输入为
7 4,则输出的最后一行为( )。
{{ select(33) }}
- 1 2 3 4
- 4 5 6 7
- 4 3 2 1
- 7 6 5 4
三、完善程序(单选题,每题 3 分,共计 30 分)
第一题
给定一个字符串 ,有 组询问,每次给定一个字符串 ,求字符串 是否是 中的一个子序列。 数据保证 ,所有字符串仅包含小写字母。
#include <iostream>
using namespace std;
const int BASE = 26;
string S, T;
int q, Pos[100005][BASE];
int main(){
cin >> S;
int n = S.size();
for (int i = 0; i < BASE; i++)
___(1)___ = -1;
for (int i = n - 1; i >= 0; i--){
for (int j = 0; j < BASE; j++)
___(2)___;
___(3)___;
}
cin >> q;
while (q--){
cin >> T;
int len = T.size(), now = 0;
for (int i = 0; ___(4)___; i++)
now = ___(5)___;
if (now != -1)
cout << "YES\n";
else
cout << "NO\n";
}
return 0;
}
- (1) 处应填()
{{ select(34) }}
Pos[i][n - 1]Pos[i][n]Pos[n - 1][i]Pos[n][i]
- (2) 处应填()
{{ select(35) }}
Pos[i][j] = Pos[i - 1][j]Pos[i][j] = Pos[i + 1][j]Pos[i][j] = Pos[i][j - 1]Pos[i][j] = Pos[i][j + 1]
- (3) 处应填()
{{ select(36) }}
Pos[i][S[i] - 'a'] = iPos[i][S[i] - 'A'] = iPos[i][S[i]] = iPos[i][i] = S[i]
- (4) 处应填()
{{ select(37) }}
i < lennow != -1i < len && now != ni < len && now != -1
- (5) 处应填()
{{ select(38) }}
Pos[now][T[i] - 'a']Pos[now][S[i] - 'a']Pos[now + 1][T[i] - 'a']Pos[now + 1][S[i] - 'a']
第二题
(排列数)输输入两个正整数 , 在 中任取 个数,按字典序从小到大输出所有这样的排列。
例如: 输入: 3 2 输出:
1 2
1 3
2 1
2 3
3 1
3 2
#include <iostream>
#include <cstring>
using namespace std;
const int SIZE = 25;
bool used[SIZE];
int data[SIZE];
int n, m, i, j, k;
bool flag;
int main() {
cin >> n >> m;
memset(used, false, sizeof(used));
for (i = 1; i <= m; i++) {
data[i] = i;
used[i] = true;
}
flag = true;
while (flag) {
for (i = 1; i <= m - 1; i++) cout << data[i] << " ";
cout << data[m] << endl;
flag = ___(1)___;
for (i = m; i >= 1; i--) {
___(2)___;
for (j = data[i] + 1; j <= n; j++)
if (!used[j]) {
used[j] = true;
data[i] = ___(3)___;
flag = true;
break;
}
if (flag) {
for (k = i + 1; k <= m; k++)
for (j = 1; j <= ___(4)___; j++)
if (!used[j]) {
data[k] = j;
used[j] = true;
break;
}
___(5)___;
}
}
}
return 0;
}
- (1) 处应填( )
{{ select(39) }}
falsetrue1-1
- (2) 处应填( )
{{ select(40) }}
used[i] = truedata[i] = iused[data[i]] = trueused[data[i]] = false
- (3) 处应填( )
{{ select(41) }}
jitruefalse
- (4) 处应填( )
{{ select(42) }}
nmij
- (5) 处应填( )
{{ select(43) }}
return 0exitcontinuebreak