#A. 2023第三次初赛模拟
2023第三次初赛模拟
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
初赛模拟卷(三)
一、单项选择题(共15题,每题2分,共计30分;每题有且仅有一个正确选项)
- 一棵完全二叉树的结点总数为 ,其叶结点数为( )。 {{ select(1) }}
- 18个
- 20个
- 21个
- 19个
- C++ 程序运行时,是在哪个存储器上进行的?( ) {{ select(2) }}
- RAM
- ROM
- CACHE
- 硬盘
- 下列不同进制的数中,最大的一个数是( )。 {{ select(3) }}
- 八进制数
- 二讲制数
- 十进制数
- 十六进制数
- 一棵树 T 有 个度数为 的结点、有 个度数为 的结点、有 个度数为 的结点,那么树 T 有( )个树叶。 {{ 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) }}
- 12MB + 400KB
- 12MB
- 12MB - 12MB + 400KB
- 12MB - 400KB
- 在非空的双向链表中由 所指向的结点右边插入一个由 所指向的结点,其动作依次为:
p->left = q; p->right = q->right; q->right=p;
()。. {{ select(8) }}
q->left = p
:q->right->left = p
;p->right->left = p
;p->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.100
10.16.13.100
234.123.6.5
127.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'] = i
Pos[i][S[i] – 'A'] = i
Pos[i][S[i]] = i
Pos[i][i] = S[i]
- (4) 处应填() {{ select(37) }}
i < len
now != -1
i < len && now != n
i < 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) }}
false
true
1
-1
- (2) 处应填( ) {{ select(40) }}
used[i] = true
data[i] =i
used[data[i]] = true
used[data[i]] = false
- (3) 处应填( ) {{ select(41) }}
j
i
true
false
- (4) 处应填( ) {{ select(42) }}
n
m
i
j
- (5) 处应填( ) {{ select(43) }}
return 0
exit
continue
break