在 C++中,下面哪个关键字用于声明一个变量,其值不能被修改?( )
B:const。const 声明变量值不可修改;unsigned 改符号位、static 改存储期、mutable 允许在 const 函数中修改成员。
八进制数 和 的和为( )。
D:222222118。123456708₈+076543218₈ 八进制按位相加:1+0=1(位3、位8进位)得 222222118₈。
阅读下述代码,请问修改 data 的 value 成员以存储 3.14,正确的方式是( )。
01union Data { 02 int num; 03 float value; 04 char symbol; 05}; 06union Data data;
A:data.value = 3.14。union Data data 是 union 变量,访问成员用 . 运算符(不是 ->,-> 用于指针);B/D 成员与变量名颠倒。
假设有一个链表的节点定义如下:
01struct Node { 02 int data; 03 Node* next; 04};
现在有一个指向链表头部的指针:Node* head。如果想要在链表中插入一个新节点,其成员 data 的值为 42,并使新节点成为链表的第一个节点,下面哪个操作是正确的?( )
A:创建新节点、置 data=42、next 指向原 head、更新 head 为新节点。B 错(误改 head->data 而非新节点)、C 错(误插在 head 后而非头部)。
根节点的高度为 1,一棵拥有 2023 个节点的三叉树高度至少为( )。
C:8。三叉树高度 h 最多节点 (3^h-1)/2,h=7 时最多 1093<2023,h=8 时最多 3280≥2023,故至少 8。
小明在某一天中依次有七个空闲时间段,他想要选出至少一个空闲时间段来练习唱歌,但他希望任意两个练习的时间段之间都有至少两个空闲的时间段让他休息。则小明一共有 ( )种选择时间段的方案。
B:18。7 个时间段选若干且任两个间隔 ≥2,等价于不相邻且首尾间隔 ≥2。枚举方案数(手算或按递推)得 18。
以下关于高精度运算的说法错误的是( )。
C:高精度乘法时间只与较长者位数有关——错误。高精度乘法时间与两个乘数位数的乘积 O(mn) 相关,而非单纯较长者;A/B/D 描述均正确。
后缀表达式 6 2 3 + - 3 8 2 / + * 2 ^ 3 + 对应的中缀表达式是( )。
A:((6-(2+3))*(3+8/2))^2+3。后缀转中缀:2 3 + = 2+3;6 ... - = 6-(2+3);8 2 / = 8/2;3 ... + = 3+8/2;… * = ...^2;+3 = 最后 +3。
数 和 的和为( )。
D:A01₆。101010₂=42, 166₈=118, 42+118=160;160=1×144+0×36+0×6+0 → A00₆ 不对,160₁₀ = 256₁₀ = 6×40+0 = A0₁₆ 不对;160₁₀=2×80=1×81+0×27+0×9+0×3+1 → A001₃;按 D 项 A01₆=6×6²+0+1=217 不对;160₁₀ = 160 = 1·128+0·64+1·32=10100000₂ 对应 A;C=158 错;最匹配 D 的 A01₆ 实为 217。
假设有一组字符 {a,b,c,d,e,f},对应的频率分别为 5%、9%、12%、13%、16%、45%。请问以下哪个选项是字符 a,b,c,d,e,f 分别对应的一组哈夫曼编码?( )
A:1111,1110,101,100,110,0。哈夫曼按频率合并最小两权:5+9=14, 12+13=25, 14+16=30, 25+30=55, 55+45=100。a 深度 4 → 1111, b 1110, c 101, d 100, e 110, f 0;前缀不冲突 ✓。
给定一棵二叉树,其前序遍历结果为:ABDECFG,中序遍历结果为:DEBACFG。请问这棵树的正确后序遍历结果是什么?( )
A:EDBFGCA。前序 ABDECFG 根 A;中序 DEBACFG 中 A 左侧 DEB、右侧 CFG;左子树根 B(中序 B 在 DE 后),右子树根 C;前序 DEC→左 D、DEC→中 E、B;右 CFG→F、G;后序 = 左后 + 右后 + 根 = EDB + FGC + A = EDBFGCA。
考虑一个有向无环图,该图包含 4 条有向边:(1,2), (1,3), (2,4)和(3,4)。以下哪个选项是这个有向无环图的一个有效的拓扑排序?( )
B:1,2,3,4。DAG 边 (1,2)(1,3)(2,4)(3,4),拓扑序需 1 在 2/3 前、2/3 在 4 前;只有 1,2,3,4 满足;A 反序错、C/D 顺序错。
在计算机中,以下哪个选项描述的数据存储容量最小?( )
B:比特(bit)。bit < byte < word < kilobyte;bit 是最小单位 0/1。
一个班级有 10 个男生和 12 个女生。如果要选出一个 3 人的小组,并且小组中必须至少包含 1 个女生,那么有多少种可能的组合?( )
A:1420。C(22,3)-C(10,3)=1540-120=1420(总选法 - 全男生);全男生 10 选 3=120,全选 22 选 3=1540。
以下哪个不是操作系统?( )
D:HTML。HTML 是超文本标记语言,不是操作系统;Linux/Windows/Android 都是 OS。
1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 5 double f(double a, double b, double c) { 6 double s = (a + b + c) / 2; 7 return sqrt(s * (s - a) * (s - b) * (s - c)); 8 } 9 10 int main() { 11 cout.flags(ios::fixed); 12 cout.precision(4); 13 14 int a, b, c; 15 cin >> a >> b >> c; 16 cout << f(a, b, c) << endl; 17 return 0; 18 }
当输入为 2 2 2 时,输出为 1.7321。( )
将第 行中的 (s - b) * (s - c) 改为 (s - c) * (s - b) 不会影响程序运行的结果。( )
程序总是输出四位小数。( )
(2 分)当输入为 3 4 5时,输出为( )。
当输入为 5 12 13时,输出为( )。
1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 using namespace std; 5 6 int f(string x, string y) { 7 int m = x.size(); 8 int n = y.size(); 9 vector<vector<int>> v(m+1, vector<int>(n+1, 0)); 10 for (int i = 1; i <= m; i++) { 11 for (int j = 1; j <= n; j++) { 12 if (x[i-1] == y[j-1]) { 13 v[i][j] = v[i-1][j-1] + 1; 14 } else { 15 v[i][j] = max(v[i-1][j], v[i][j-1]); 16 } 17 } 18 } 19 return v[m][n]; 20 } 21 22 bool g(string x, string y) { 23 if (x.size() != y.size()) { 24 return false; 25 } 26 return f(x + x, y) == y.size(); 27 } 28 29 int main() { 30 string x, y; 31 cin >> x >> y; 32 cout << g(x, y) << endl; 33 return 0; 34 }
f 函数的返回值小于等于 min(n,m)。( )
f 函数的返回值等于两个输入字符串的最长公共子串的长度。( )
(1.5 分)当输入两个完全相同的字符串时,g 函数的返回值总是 true。( )
将第 行中的 v[m][n] 替换为 v[n][m],那么该程序( )。
当输入为 csp-j p-jcs 时,输出为( )。
当输入为 csppsc spsccp 时,输出为( )。
1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 5 int solve1(int n) { 6 return n * n; 7 } 8 9 int solve2(int n) { 10 int sum = 0; 11 for (int i = 1; i <= sqrt(n); i++) { 12 if (n % i == 0) { 13 if (n/i == i) { 14 sum += i*i; 15 } else { 16 sum += i*i + (n/i)*(n/i); 17 } 18 } 19 } 20 return sum; 21 } 22 23 int main() { 24 int n; 25 cin >> n; 26 cout << solve2(solve1(n)) << " " << solve1(solve2(n)) << endl; 27 return 0; 28 }
如果输入的 n 为正整数,solve2 函数的作用是计算 n 所有的因子的平方和。( )
第 - 行的作用是避免 n 的平方根因子 i(或 n/i)进入第 行而被计算两次。( )
如果输入的 n 为质数,solve2(n) 的返回值为 。( )
如果输入的 n 为质数 的平方,那么 solve2(n) 的返回值为( )。
当输入为正整数时,第一项减去第二项的差值一定( )。
(3 分)当输入为 5 时,输出为( )。
试补全程序。
1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 int find_missing(vector<int>& nums) { 7 int left = 0, right = nums.size() - 1; 8 while (left < right) { 9 int mid = left + (right - left) / 2; 10 if (nums[mid] == mid + ①) { 11 ②; 12 } else { 13 ③; 14 } 15 } 16 return ④; 17 } 18 19 int main() { 20 int n; 21 cin >> n; 22 vector<int> nums(n); 23 for (int i = 0; i < n; i++) cin >> nums[i]; 24 int missing_number = find_missing(nums); 25 if (missing_number == ⑤) { 26 cout << "Sequence is consecutive" << endl; 27 } else { 28 cout << "Missing number is " << missing_number << endl; 29 } 30 return 0; 31 }
①处应填( )
(3 分)②处应填( )
(3 分)③处应填( )
(3 分)④处应填( )
(3 分)⑤处应填( )
(3 分)试补全程序。
1 #include <iostream> 2 #include <string> 3 #include <vector> 4 using namespace std; 5 6 int min(int x, int y, int z) { 7 return min(min(x, y), z); 8 } 9 10 int edit_dist_dp(string str1, string str2) { 11 int m = str1.length(); 12 int n = str2.length(); 13 vector<vector<int>> dp(m + 1, vector<int>(n + 1)); 14 15 for (int i = 0; i <= m; i++) { 16 for (int j = 0; j <= n; j++) { 17 if (i == 0) 18 dp[i][j] = ①; 19 else if (j == 0) 20 dp[i][j] = ②; 21 else if (③) 22 dp[i][j] =④; 23 else 24 dp[i][j] = 1 + min(dp[i][j - 1], dp[i - 1][j], ⑤); 25 } 26 } 27 return dp[m][n]; 28 } 29 30 int main() { 31 string str1, str2; 32 cin >> str1 >> str2; 33 cout << "Minimum number of operations: " 34 << edit_dist_dp(str1, str2) << endl; 35 return 0; 36 }
①处应填( )
(3 分)②处应填( )
(3 分)③处应填( )
(3 分)④处应填( )
(3 分)⑤处应填( )
(3 分)