2023年9月真题
一、单选题(每题2分,共30分)
正确答案:A
解析:考察知识点:计算机基础
本题属于考察计算机基础知识知识。手写板是输入信息的设备,选A。
正确答案:D
解析:考察知识点:运算表达式和位运算
本题属于考察运算表达式和位运算知识。b 不等于0,a 是b 的3倍。A 选项中,a 右移 3 位,相当于除以 8;B 是取余运算;如果a=7,b=2,a/b的结果也等于 3,因为是整型,C 选项也不正确;选 D。
正确答案:C
解析:考察知识点:数据类型和运算表达式
本题属于考察数据类型、逗号表达式、运算表达式知识。逗号表达式从左到右依次计算每一个表达式,整个逗号表达式的结果是最后一个表达式的计算结果,a=6,b=3*15/2=22,b=6+22=28,选 C。
正确答案:C
解析:考察知识点:函数和递归算法
本题属于考察递归和函数知识。sumA 用循环求的是1 到n 的总和;sumB用递归的方式求 1 到 n 的总和。1 加到 100000 的和大于int 类型最大值,2147483647,会溢出,选 C。
正确答案:A
解析:考察知识点:函数和递归算法
本题属于考察递归和函数知识。要倒序输出字符串,先输出字符串中的最后一个字符,最后一个字符下标是长度-1,然后翻转除了最后一个字符的字符串,这个字符串是从 0 开始,选 sln.length()-1 个字符,选A。
正确答案:B
解析:考察知识点:函数和递归算法
本题属于考察递归和函数知识。汉诺塔比较经典的递归问题,第11行代码意味这剩下的 N-1 快圆盘,现在 B 柱子上,借助 A 柱,挪到C柱上,选B。
正确答案:A
解析:考察知识点:函数的调用、值传递
本题考察的是 vector 和 sort 函数的使用。本题中首先创建了一个vector
lstA 存储整数 1~99,然后调用 sort 函数对 lstA 进行排序,sort 函数排序需要传递三个参数,前两个参数决定了排序范围的起始位置和结束位置,第三个参数是排序规则函数,排序规则函数需要两个参数和一个 bool 类型的返回值,所以代码 1 处传递排序规则函数 compare,只需要写函数名即可,不需要写成调用的形式,排除选项 B 和 D。
接下来的代码是将 lstA 中的奇数存储到另一个 vector lstB 中,判断奇数可以使用自定义函数 isOdd,代码 2 处是调用 isOdd 函数判断当前的lstA[i]是否为奇数,因此需要使用调用函数语法 isOdd(IstA[i]),正确答案为A 选项。
正确答案:C
解析:考察知识点:函数的定义、调用、值传递
本题考察函数指针的知识。isEven 是一个自定义函数,用于判断为偶数。checkNum 也是一个自定义函数,该函数的第一个参数是一个函数指针类型,需要传递一个函数,所传递的这个函数要求返回值为 bool,并且有一个int 类型参数,isEven 函数复合该类型的要求,所以调用 checkNum 函数时,第一个参数传递函数 isEven,第二个参数传递整数 10 没有错误,执行checkNum函数内部代码 Fx(N),也就是调用函数 isEven(10),整数 10 是偶数,因此最后调用的结果是1,因此正确答案选 C。
正确答案:C
解析:考察知识点:函数指针
本题考察函数指针的知识。checkNum 函数的第一个参数需要传递一个返回值为 bool、参数为 int 类型的函数,isEven 函数复合该类型的要求,所以调用 checkNum 函数时,第一个参数传递函数 isEven,不会导致编译错误,Square函数的返回值是 int 类型,不符合 cehckNum 函数的第一个参数的类型要求,因此调用时传递 Square 函数会导致编译错误,所以答案为C 选项。
正确答案:D
解析:考察知识点:递归和函数
本题属于考察递归和函数知识。第 13 行代码调用jumFloor(4),首先输出 4#,然后返回 jumFloor(3)+ jumFloor(2),jumFloor(3)输出3#再继续递归调用 jumFloor(2)+ jumFloor(1)依次输出 2#1#并返回 3。jumFloor(2)输出 2#返回 2,所以第 13 行代码调用之后的返回结果是3+2=5,最后的输出结果就是 4#3#2#1#2#5,所以正确答案选 D。
正确答案:B
解析:考察知识点:时间复杂度
本题属于考察时间复杂度的相关知识。isPrimeA 的最坏时间复杂度是O(N),isPrimeB 的最坏时间复杂度是 O(),O()优于 O(N),正确答案B选项。
正确答案:C
解析:考察知识点:分治算法
本题考察归并排序的相关知识。listA 的长度为7,根据递归返回的条件s t a r t > = e nd ,merge 函数会被调用 6 次,正确答案C 选项。
正确答案:B
解析:考察知识点:分治算法、归并排序
本题属于考察归并排序的相关知识。归并排序采用的是分治算法思想,正确答案 B 选项。
正确答案:A
解析:考察知识点:归并排序算法
本题属于考察归并排序的相关知识。归并排序基本思想就是将数组分成两个⼦数组,分别排序后再合并,正确答案 A 选项。
正确答案:C
解析:考察知识点:循环链表
本题考察链表的相关知识。第 15 行代码~第 17 行代码创建了三个链表的节点,第一个节点的 next 指向第二个节点,第二个节点的next 指向第三个节点,第三个节点的 next 又指向了第一个节点,形成了一个环,所以是循环链表,正确答案 C 选项。
二、判断题(每题2分,共20分)
正确答案:正确
解析:考察知识点:计算机网络
本题是计算机网络的知识,传输层是这 2 个协议。
正确答案:错误
解析:考察知识点:流程图
本题考察流程图,流程图中没有三角框。
正确答案:错误
解析:考察知识点:线性筛法和埃氏筛法
本题考察筛选素数的算法,线性筛法是在埃⽒筛法基础的改进,效率更高。
正确答案:错误
解析:考察知识点:二分法和链表
本题考察二分法和链表的知识点,使用二分法查找元素,元素必须是顺序存储的,链表不是顺序存储数据,因此不能使用二分法。
正确答案:正确
解析:考察知识点:循环链表
本题考察循环链表的知识点,链表的最后一个节点的next 指针指向头结点就能形成循环链表。
正确答案:正确
解析:考察知识点:贪心算法
本题考察贪心算法的知识点,贪心算法找到的不一定是最优解。
正确答案:错误
解析:考察知识点:冒泡排序
本题考察排序算法性能,冒泡时间复杂度为 O(),归并排序的时间复杂度为 O(NlogN),因此归并优于冒泡,说法错误。
正确答案:正确
解析:考察知识点:qsort函数:快速排序函数
本题考察 qsort 函数,qsort 函数内部使用的是不稳定的排序算法。
正确答案:正确
解析:考察知识点: 质数的判定和筛选
本题考察质数的判定和筛选,说法正确。
正确答案:正确
解析:考察知识点:sort函数
本题考察 sort 函数的排序规则,排序规则函数compareModule5 确定的排序规则是根据除 5 的余数进行升序排序,所以 main 函数中对0~6 范围的整数排序之后的结果就是 0516234.
三、编程题(每题25分,共50分)
本题考察 初等数论,多重循环,算术运算
唯一分解定理(算术基本定理)是数论中的一个基本定理,表明每个正整数可以唯一地分解为素数的乘积。
#include<bits/stdc++.h>
using namespace std;
int main() {long long num, i=2, cnt;cin>>num;int first=1;while(i*i<=num) { // cnt=0; //记录分解出的素因子个数 while(num%i == 0) { //素因子 cnt++;num /= i;}if(cnt>0) { //素因子个数至少一个 //考虑输出格式 if(!first) cout<<" * ";cout<<i;if(cnt>1) cout<<"^"<<cnt;first=0;}i++;}//num!=1,说明只有num本身是素数 if(num!=1) {if(!first) cout<<" * ";cout<<num;}return 0;
}
本题考察 贪心算法、数组、sort 函数。
题目其实有很明显的贪心特性,要想获得最大的奖励,肯定考虑优先安排奖励大的游戏,游戏有截至完成时间,因此安排游戏的时候,贴着截至完成时间往前安排,给截至时间容忍度低的游戏尽量留出空间,能安排的下就安排,安排不了就放弃。
#include<bits/stdc++.h>
using namespace std;
struct game{int time;int award;
}arr[501];
bool cmp(game a, game b){return a.award > b.award;
}
int main() {int n, flag[501]={};cin>>n;for(int i=1; i<=n; i++) cin>>arr[i].time;for(int i=1; i<=n; i++) cin>>arr[i].award;sort(arr+1, arr+n+1, cmp);int res=0, j=1;for(int i=1; i<=n; i++){for(int j=arr[i].time; j>=1; j--){if(!flag[j]){flag[j]=true;res += arr[i].award;break;}}}cout<<res;return 0;
}