国家 “以旧换新” 政策仍在继续,小杨家决定在家里旧的冰箱、电视、洗衣机、微波炉中选两种换新。其中,冰箱有 种型号可选,电视有 种型号可选,洗衣机有 种型号可选,微波炉有 种型号可选。请问小杨家共有多少种换新的方案?( )
B:119。先选两种家电共 C(4,2)=6 组,再乘各自型号数:冰箱+电视 4×6=24,冰箱+洗衣机 4×3=12,冰箱+微波炉 4×5=20,电视+洗衣机 6×3=18,电视+微波炉 6×5=30,洗衣机+微波炉 3×5=15,合计 119。
第 2 题 小杨和位朋友约好一起去看电影“哪吒2”。打开购票软件,他们发现,已经没有同一排连续的四个座位了 (图中每个方框代表一个座位,红色方框代表已经售出)。朋友们商量了一下,决定分为两组,每组两人在同一排 的相邻两个座位,且两组之间至少有一对座位是前后相邻的。请问共有多少种购票方案?( )。
C:7。按图中座位分布逐一枚举:两组各占同一排相邻两座,且两组间须存在前后相邻的一对座位(排除已售红座与同排四连座),满足条件的购票方案恰好 7 种。
下面关于 C++ 类构造和析构函数的说法,错误的是
B:析构函数不必须声明为虚函数,只有通过基类指针多态删除对象时才需要,普通场景用非虚析构完全合法;构造函数不能为虚、默认构造和析构可声明为 private 均正确。
下列关于树和图的说法,错误的是 ( )
A:树是连通无环图(可有向可无向),但有向无环图不一定是树:森林、以及 A→B、A→C、B→D、C→D 这类多分支结构都是 DAG 而非树;B、C、D 均正确。
从 1 到 2025 这 2025 个数中,包含数字 5 的个数 ( )
D:603。按位统计 1~2025:个位 5 出现 203 次(每 10 个 1 次共 202,加 2025 本身),十位每 100 个出现 10 次共 200,百位 500-599、1500-1599 共 200,合计 203+200+200=603。
已定义 double 类型的变量 r 和 theta ,分别表示图中圆半径和圆心角。下列表达式中可以求出弦长 s 的是 ( )
D:2r·sin(θ/2)。圆心角 θ 的弦长 s=2r·sin(θ/2)(过圆心作弦的垂线,半弦 r·sin(θ/2));A、B 误用 cos,C 少了 2 倍关系。
个节点的平衡二叉树的高为
D:无法确定。平衡二叉树只约束左右子树高度差≤1,不限定具体形态,N 一定时高度可在约 log₂N 到 1.44log₂N 之间变化,不能唯一确定。
下列关于算法的说法,错误的是
B:分治算法的子问题可以重叠,如动态规划、归并求逆序对等会重复利用子问题结果,『必须相互独立』说法错误;A、C、D 描述正确。
2025 是个神奇的数字,因为它是由两个数 20 和 25 拼接而成,而且 。小杨决定写个程序找找小于 的正整数中共有多少这样神奇的数字。下面程序横线处应填入的是 ( )。
01#include <string> 02int count_miracle(int N) { 03 int cnt = 0; 04 for(int n = 1; n * n < N; n++) { 05 int n2 = n * n; 06 std::string s = std::to_string(n2); 07 for (int i = 1; i < s.length(); i++) 08 if(s[i]!='0'){ 09 std::string s1 = s.substr(0,i); 10 std::string sr = s.substr(i); 11 int n1 = std::stoi(s1); 12 int nr = std::stoi(sr); 13 if(____ )//在此处填入选项 14 cnt++; 15 } 16 } 17 return cnt; 18}
A:nl+nr==n。神奇数的定义是拼接后两部分之和的平方等于原数:2025 中 20+25=45 且 45²=2025,程序中 n2=n²,故判断 nl+nr 是否等于 n。
2025 是个神奇的数字,因为它是由两个数 20 和 25 拼接而成,而且 。小杨决定写个程序找找小于 的正整数中共有多少这样神奇的数字。该函数的时间复杂度为 ( )。。
01#include <string> 02int count_miracle(int N) { 03 int cnt = 0; 04 for(int n = 1; n * n < N; n++) { 05 int n2 = n * n; 06 std::string s = std::to_string(n2); 07 for (int i = 1; i < s.length(); i++) 08 if(s[i]!='0'){ 09 std::string s1 = s.substr(0,i); 10 std::string sr = s.substr(i); 11 int n1 = std::stoi(s1); 12 int nr = std::stoi(sr); 13 if(___ )//在此处填入选项 14 cnt++; 15 } 16 } 17 return cnt; 18}
D:O(√N·(log N)²)。外层 n 从 1 到 √N;内层字符串长度 O(log N),substr 与 stoi 各耗 O(log N),故内层 O((log N)²),总 O(√N(log N)²)。
下面的欧氏筛法程序中,两个横线处应填入的分别是 ( )
01bool isPrime[MAXN + 1] = {false}; 02int primes[MAXP], num = 0; 03void sieve() { 04 for (int n = 2; n <= MAXN; n++) { 05 if (!isPrime[n]) primes[num++] = n; 06 for (int i = 0; i < num && (此处1); i++) { 07 if (此处2) 08 break; 09 } 10 } 11}
C:第一个空 nprimes[i]<=MAXN 保证筛到的合数不越界;第二个空 n%primes[i]==0 时 break——n 的最小质因子是 primes[i],则 nprimes[i+1] 应由更小的质因子筛掉,提前终止保证线性。
下面 Floyd 算法中,横线处应该填入的是 ( )。
01#include <iostream> 02using namespace std; 03#define N 21 04#define INF 99999999 05int map[N][N]; 06int main() { 07 int n, m, t1, t2, t3; 08 cin >> n >> m; 09 for (int i = 1; i <= n; i++) { 10 for (int j = 1; j <= n; j++) { 11 if (i == j) 12 map[i][j] = 0; 13 else 14 map[i][j] = INF; 15 } 16 } 17 for (int i = 1; i <= m; i++) { 18 cin >> t1 >> t2 >> t3; 19 map[t1][t2] = t3; 20 } 21 for (int k = 1; k <= n; k++) 22 for (int i = 1; i <= n; i++) 23 for (int j = 1; j <= n; j++) 24 if (map[i][j] > map[i][k] + map[k][j]) 25 // 在此处填入选项 26 for (int i = 1; i <= n; i++) { 27 for (int j = 1; j <= n; j++) { 28 cout.width(4); 29 cout << map[i][j]; 30 cout << endl; 31 } 32 } 33 return 0; 34}
A:map[i][j]=map[i][k]+map[k][j]。Floyd 松弛:若经 k 中转的路径更短则用更短值覆盖 map[i][j];B、C、D 的赋值对象或符号错误。
下面 Floyd 算法程序的时间复杂度为 ( )。
01#include <iostream> 02using namespace std; 03#define N 21 04#define INF 99999999 05int map[N][N]; 06int main() { 07 int n, m, t1, t2, t3; 08 cin >> n >> m; 09 for (int i = 1; i <= n; i++) { 10 for (int j = 1; j <= n; j++) { 11 if (i == j) 12 map[i][j] = 0; 13 else 14 map[i][j] = INF; 15 } 16 } 17 for (int i = 1; i <= m; i++) { 18 cin >> t1 >> t2 >> t3; 19 map[t1][t2] = t3; 20 } 21 for (int k = 1; k <= n; k++) 22 for (int i = 1; i <= n; i++) 23 for (int j = 1; j <= n; j++) 24 if (map[i][j] > map[i][k] + map[k][j]) 25 // 在此处填入选项 26 for (int i = 1; i <= n; i++) { 27 for (int j = 1; j <= n; j++) { 28 cout.width(4); 29 cout << map[i][j]; 30 cout << endl; 31 } 32 } 33 return 0; 34}
C:O(N³)。Floyd 对中转点 k、起点 i、终点 j 三重循环各 N 层,内层仅常数次比较与赋值,总复杂度 O(N³)。
下列程序实现了输出杨辉三角形,代码中横线部分应该填入的是 ( )
01#include <iostream> 02using namespace std; 03#define N 35 04int a[N]; 05int main() { 06 int n; 07 cin >> n; 08 for (int i = 0; i < n; i++) { 09 a[i] = 1; 10 for (int j = i - 1; j > 0; j--) 11 // 在此处填入选项 12 for (int j = 0; j <= i; j++) 13 cout << a[j] << " "; 14 cout << endl; 15 } 16 return 0; 17}
B:a[j]+=a[j-1]。一维滚动数组按行生成杨辉三角,本行 a[j] 应等于上一行 a[j-1]+a[j],为避免覆盖必须从右往左更新(j 从 i-1 递减到 1),故选 B。
下列程序实现了输出杨辉三角形,其时间复杂度为 ( )
01#include <iostream> 02using namespace std; 03#define N 35 04int a[N]; 05int main() { 06 int n; 07 cin >> n; 08 for (int i = 0; i < n; i++) { 09 a[i] = 1; 10 for (int j = i - 1; j > 0; j--) 11 // 在此处填入选项 12 for (int j = 0; j <= i; j++) 13 cout << a[j] << " "; 14 cout << endl; 15 } 16 return 0; 17}
C:O(n²)。外层 i 从 0 到 n−1,内层 j 循环约 i 次,总操作数约 1+2+…+n=O(n²),与输出 n 行 n 个数一致。
表达式 '5' - 3.0 的结果为 2.0,类型为 double 。( )
B:错误。'5' 参与运算提升为 int(ASCII 码 53),53−3.0=50.0;结果是 double 但值为 50.0 而非 2.0,把字符数字当真值须先减 '0'。
在 C++ 语言中,如果想要在一个函数内调用一个类的私有方法,可以在该类中将该函数声明为友元函数。( )
A:正确。把函数声明为该类的友元(friend),它就能访问该类的私有成员,从而可以在函数内调用类的私有方法,这是友元机制的主要用途。
插入排序一般是稳定的。
A:正确。插入排序把新元素插到相等元素之后,不改变相等元素的相对次序,是稳定排序;基于比较的排序中不稳定的是希尔、选择、快速、堆四种。
5 个相同的红球和 4 个相同的蓝球排成一排,要求蓝球不能相邻,则一共有 种排列方案。( )
A:正确。先排 5 个红球形成 6 个空位(含两端),把 4 个蓝球插入不同空位且每空至多一个,即 C(6,4)=15 种。
使用 math.h 或 cmath 头文件中的函数,表达式 pow(2, 5) 的结果类型为 int、值为 32。( )
B:错误。pow 的返回值类型是 double,pow(2,5) 得 double 类型的 32.0,不是 int;C 的 pow 也按 double 返回。
C++ 是一种面向对象编程语言,C 则不是。多态是面向对象三大特性之一,虚函数是动态多态的代表特性。因此,使用 C 语言无法实现虚函数。
B:错误。C 语言没有内建虚函数语法,但可用函数指针手动构造虚函数表(vtable)实现动态多态,UNIX 系统开发中早有此类实践。
在 个节点的平衡二叉树中查找指定元素的最差时间复杂度为
B:错误。平衡二叉树高度恒为 O(log N),查找沿根到叶一条路径下降,最差比较次数即 O(log N),而非 O(N);O(N) 是普通 BST 退化成链的情况。
定义 int 类型的变量 a 和 b,求二次函数 y=+ax+b 取最小值时 x 的值,可以通过表达式 -a / 2.0 求得
A:正确。二次函数 y=x²+ax+b 开口向上,最小值在对称轴 x=−a/2 处取得;a 为 int 时除以 2.0 保证结果精确为 double。
判断无向图中是否有环,可以通过广度优先搜索实现
A:正确。BFS 遍历无向图,遇到已访问且非父节点的顶点即说明存在环;DFS 同样可行,两种搜索都能判环,判断能力等价。
从 32 名学生中选出 4 人分别担任班长、副班长、学习委员和组织委员,共有 种不同的选法。
B:错误。四个职务各不相同,选人后还要分配职务,是排列 P(32,4)=32×31×30×29;C(32,4) 只选人不排序,少乘了 4!。