- C++
X02_初赛练习卷一
- 2024-2-2 9:51:09 @
【题目描述】
以下哪个不是计算机的输入设备?
A.键盘 B.鼠标 C.显示器 D.扫描仪
【题目答案】
C.显示器
【题目解析】
键盘、鼠标、扫描仪都是计算机的输入设备,而显示器属于输出设备。
【题目描述】
在位运算操作中,以下哪个操作的优先级最高?
A.按位与(AND) B.按位或(OR) C.按位异或(XOR) D.左移位(<<)
【题目答案】
D
【题目解析】
位运算操作中,左移位(<<)操作的优先级最高,然后依次是按位与(AND)、按位异或(XOR)、
按位或(OR)。
【题目描述】
将二进制数1101转换为八进制,结果为:
A. 5 B. 11 C. 13 D. 15
【题目答案】
D
【题目解析】
要将二进制数转换为八进制数,可以将二进制数按照每三位进行分组,再将每组二进制数转换为对应的八进制数。从右往左数,每三位为一组,从高位开始转换。
【题目描述】
假设我们使用4位二进制表示有符号整数,其中最高位为符号位,0表示正数,1表示负数。请问以下选项中,哪个是十进制数-5的补码表示?
A. 0101 B. 1010 C. 1111 D. 1011
【题目答案】
D
【题目解析】
原码是最基本的表示方式,取最高位作为符号位,其余位表示数值的绝对值。对于负数,补码表示方式是在其原码的基础上将所有位取反,然后再加1。
-5的原码为:1101
对原码进行按位取反:1010
再加1得到补码:1011
因此,十进制数-5的补码表示为1011,选项D为正确答案。
【题目描述】
有多少种从5个不同元素中取出3个元素的组合方式?
A. 5 B. 7 C. 9 D. 10
【题目答案】
D
【题目解析】
从5个不同的元素中选出3个元素的组合方式数为C(5,3),即从5个元素中选出3个元素组成的组合数量。使用组合计算公式C(n,m)=n!/(m!*(n-m)!),可以得到:
C(5,3) = 5! / (3! * (5-3)!) = 10
【题目描述】
完善程序
给出一个n长度的只包含字符‘B'和’W‘的字符串(下标从0开始),每次将连续的k个字符全部设为’B‘(不论之前是否是'B'),下面代码是求解最少使用的次数。
#include<iostream>
using namespace std;
char s[1009];
int main() {
int n, k;
cin >> n >> k;
cin >> ①;
int ans = ②;
for (int i = ③; i < n; i++) {
if (s[i] == 'W') continue;
ans++;
i += ④;
}
cout << ⑤ << '\n';
}
1.①处应填( )
A.n B.k C.s D.s+1
2.②处应填( )
A.0 B.n C.k D.k-1
3.③处应填( )
A.0 B.1 C.n D.k
4.④处应填( )
A.1 B.n C.k D.k-1
5.⑤处应填( )
A.0 B.ans C.ans+1 D.ans+n
【题目答案】
1.C
2.A
3.C
4.D
5.B
【题目解析】
1.输入字符串s,从0开始存储
2.ans存储答案,开始为0
3.字符串是从0开始存储的,因此i的初始值为0
4.如果s[i]为B,则要将[i,i+k-1]全部变为’B‘,因此i要加上k-1
5.ans是存储答案的,输出答案即可
【题目描述】
阅读程序
1 #include<iostream>
2 using namespace std;
3 char s[5][5];
4 int main() {
5 int n;
6 cin >> n;
7 while (n--) {
8 for (int i = 1; i <= 3; i++) {
9 for (int j = 1; j <= 3; j++) {
10 cin >> s[i][j];
11 }
12 }
13 bool flag = false;
14 for (int i = 1; i <= 3; i++) {
15 if (s[i][1] == s[i][2] && s[i][2] == s[i][3] && s[i][1] != '.') {
16 cout << s[i][1] << '\n';
17 flag = true;
18 break;
19 }
20 if (s[1][i] == s[2][i] && s[2][i] == s[3][i] && s[1][i] != '.') {
21 cout << s[1][i] << '\n';
22 flag = true;
23 break;
24 }
25 }
26 if (!flag && s[1][1] == s[2][2] && s[2][2] == s[3][3] && s[1][1] != '.') {
27 cout << s[1][1] << '\n';
28 flag = true;
29 }
30 if (!flag && s[1][3] == s[2][2] && s[2][2] == s[3][1] && s[2][2] != '.') {
31 cout << s[1][3] << '\n';
32 flag = true;
33 }
34 if (!flag) cout << "DRAW" << '\n';
35 }
36 return 0;
37 }
请回答下面问题:
1.假设字符串长度为n,则该程序的时间复杂度为()
A.O(n) B.O(n^2) C.O(logn) D.O(n^3)
2.若输入
1
+X+
OXO
OX.
该程序输出结果为()
A.X B.O C.+ D.DRAW
3.若输入
1
O+.
+OX
X+O
该程序输出结果为()
A.X B.O C.+ D.DRAW
4.若输入
1
.XO
OX.
+++
该程序输出结果为()
A.X B.O C.+ D.DRAW
5.若输入
1
O.+
X.O
+..
该程序输出结果为()
A.X B.O C.. D.DRAW
【题目答案】
1.A
2.A
3.B
4.C
5.D
【题目解析】
1.时间复杂度为O(9*n),其实就是O(n)
2~5该程序是判断是否有三个相同的字符(不包括'.'字符)连成一条直线(可以横、竖、斜),因此2~5依次选择ABCD