1,选择题
分析:本题是一道常识问题。
ls列出文件名,ls -l详细信息,ls -a显示所有文件,ls -s显示所有文件大小。
选择B。
分析:常识问题。
我们只需知道1-126为A类,128-191为B类,192-233为C类即可。
选择C。
分析:本题直接计算即可。
运算优先规律为()-!-&&和||。
先计算括号中的所有数值,第一轮得出!true&&true||false,第二轮算出false&&true||false,最后线性计算得false。
故本题选择B。
分析:这是一道关于链表的常识题。
链表是不可以随机访问的,排除A。
链表在某些情况下在插入前要先遍历,因此为O(n+1),B错误。
链表最大的优势在于其可以指针链接避免连续,所以排除C。
最后选择D。
分析:对于n个节点的二叉树,完全二叉树是最小。完全二叉树节点数n和高度h满足2^(h-1)<=n<2^h。
取对数后即为h = ⌈log 2(n+1)⌉−1,因此我们选择B。
分析:本题是一道进制转换计算题。
先求100的二进制数,我们可以大致将选项分为两类,一类是1100100,另一类是1010100。
计算过程如下:
1010100偏差太多,因此直接排除。
接下来计算小数。
因此我们排除B,选择C。
分析:相同分数保持相对顺序,即稳定排序。
那么直接排除ABD,选择C。
分析:本题是常识题。
先不说其他,只说C选项。
固态硬盘属于物理存储,直接将数据存在现实世界,所以当然不会丢失。
而缓存和寄存器属于暂时存储方式,一定会丢失。
内存虽然是长时间存储,但是断电不存入硬盘也无法保存。
选择C。
分析:如果我们直接想,可能很难想出来。
我们看一下题目要求,只能往下和右走,这就直接排除了D。
接下来画一幅图:
这就是最短路,我们将线段平移,可以得到m+n-1,所以选择C。
分析:本题目标是计算时间复杂度。
首先排除A,O(1)是绝对不对的。
然后排除B,本题是I*3,速度比n快的多,大致是n/3。然后我们看C,对数运算,符合题意。
因此我们选择C。
分析:本题是一道组合数学题。
本题可根据完全图的边数计算公式来求解。
对于一个具有n个顶点的完全无向图,其边数计算公式为n(n−1)/2。
已知该城市有8个交通枢纽,即n=8,将其代入上述公式可得:8(8-1)/2,得到28。
因此选择A。
分析:本题可以通过分类讨论来求解。
- 第一种情况是2个球(最少一红一蓝)。
从5个红球中取1个,根据组合数公式C,算出C(1,5)=5。
从3个蓝球中取1个,方法数为C(1,3)=3。
然后我们相乘,得到15。
- 取3个球,有两种子情况,1红2蓝和2红1蓝。
1红2蓝时从,5个红球中取1个的方法数为5,从3个蓝球中取2个方法数为C(2,3)=3。
共有3*5 = 15种取法。第二种2红1蓝,从5个红球中取2个的方法是C(2,5)=10,从3个蓝球中取一个方法数是3,3*10 = 30种。
30+15=45种解法。
- 取4个球,分3种子情况
首先是1红3蓝,2红2蓝,3红1蓝。
从5个红球中取1个的方法数为5,从3个蓝球中取3个方法数为1。
5*1共有5种解法。
从5个红球中取2个的方法是C(2,5),10种。从3个蓝球中取一个方法数为C(2,3)=3。然后相乘为10*3=30种。
最后是3红1蓝。
从5个红球中取3个的解法为C(3,5)=10,从3个蓝球中取一个的解法是3,3*10得30。
然后5+30+30=65种解法。
最后把65和45,15加起来,得出125种,所以选择B。
分析:本题考察的是前中后序遍历。
我们看看题目给出的要求,按照先行后列遍历。
就是说大约是如下这样:
这是一个二叉排序树,其特点是左子树所有结点的值小于根结点的值,根结点的值小于右子树所有结点的值。
前序遍历顺序是“根→左→右”,会优先访问根结点,无法保证输出为升序序列。
中序遍历顺序是“左→根→右”,会先访问左子树(所有较小的值),再访问根结点(中间值),最后访问右子树(所有较大的值),所以对二叉搜索树进行中序遍历,可以按升序输出所有节点。
后序遍历顺序是“左→右→根”,最后访问根结点,输出的结果是无序的。
层次遍历是按从上到下、从左到右访问节点,与节点值大小无关,不能保证按升序输出。
所以选择B。
分析:直接计算即可。
200是100的2倍。
n^3,此时n又^2,2^3=8,因此选择C。
这道题暴力计算即可。
600*1920*1080*30*24/50算出位数,然后转为KB-MB-GB。
由于信息量过大,这里就不详细计算,选择B即可。
2,阅读程序题
分析:本题是一个求最大公约数的程序。
利用辗转相除法,反复更换x和y不断取余,然后相减,最后在达到标准后退出。
这道题的思想大概就是这样,接下来开始做题。
第16题:T
我们刚才已经说过,这里是对的
第17题:F
这会在y>x的情况下产生死循环。
18题:F
160和115大小都是前者大,当然不会输出结果后者大。
19题:D
我们来计算一下:
前面的一个数值是A数除以两数最大公约数结果,而第二个数是B数除以两数最大公约数的值。
1817和299的最大公约数是23,将两数分别与23除开,得出79和13,故此选D。
20题:B
我们可以发现,本题的辗转相除法需要不断递归,这会组成树形结构。
树形结构的时间复杂度是对数运算,直接选择带有log的一项。
A,1是不可能的,错。
C,本题会递归,改变x和y的值,同时还会相减,没有n次那么多。
D,本题只有一个递归路径,连n都没有,只有一个log,不会出现n^n。
因此选择B。
分析:本题应该是最简单的阅读题。
其流程大概是输入一个序列,然后选择一个元素,如果刚好有一个元素比其大,则将该元素累加,最后输出累加结果。
现在开始做题。
21,T
前面我们分析过了,本序列中只有8比5大,故只有5符合条件。
22,T
程序特地创建了一个变量累加,所以当然是正确的。我们也可以通过模拟样例2 2 1来证明。
23,F
样例为1 2 2时,答案是0,但是1和2不相等。
24,C
只有8符合“只有一个元素比他大”。
25,C
我们前面说过、模拟过了,故此选择C。
分析:本题的行为的大致是创建了一个dfs,然后进行递归搜索的一个求和问题。
代码功能是从n个数种选取k个数,统计其和为偶数的组合数量。
26,F
当然不是,重复的也会搜索。
27,F
不初始化会导致报错。
28,T
根据我们前面的判断,1-10会选取2个数,统计其为偶数的组合数量,即2*C(2,5)。
29,B
k=0,直接退出并将ans+1,因此选B。
30,C
本代码执行了k次,每次两个dfs,由于n与k都是相近的线性数,所以也可以认为2^n=2^k,故此选择C。
3,完善程序
分析:题目已经声明,本题是一个归并排序程序,这种算法比较复杂,大体思想是将数组拆分、排序、合并,最后得出结果。优点是时间较快且稳定,缺点是空间复杂度高且实现复杂。
这道题的代码很复杂,就不细讲了,因为完善程序题大部分都是可以通过推理实现的,不需要完全知道代码含义。
接下来开始答题。
31,C
这个没什么复杂的,我们看后面得知m参数是mid,这里就是在通过上个中点拆分初始化右数组,所以直接选择和l初始化对应的m+j来填空。
32,C
根据前面的初始化,我们得知l的边界是n1,r的边界是n2。
所以直接选择C,处于范围之内。
33,C
本题是一道英文猜测题。
merge接收l,mid,r作为参数,我们只要对应首字母,即可求出答案,选择C。
34,A
结合对题目的分析,我们可以发现msort接受a的范围作为参数。
a的范围最大是从0-n-1,故此选择A。
35,B
先排除A和C,因为前面在循环结束时就已经打印过空格,这里不需要额外。
然后我们前面讲过,a的范围是0-n-1,D在范围之外,排除,所以选择B。
分析:前面讲过,本题是一个求波动子序列问题,即求产生+-之类波动的子序列。
dp是一个答案数组,后面的[2]是存储+和-的波动状态的空间。
然后进入循环进行+和-的特判,求解并存入dp,最后通过打擂台求出max。
36,A
学过C++初始化的人应该都知道,fill只能初始化一个空间,排除CD。
然后我们往后看,发现是求max,所以不可以是B,这样会求出0x3f。
37,A
本题是dp问题,需要看到全局,而B的范围越界,选择A。
38,A
我们看下面,发现这两个特判是用来判断上升和下降的。
我们按照下面对齐改,发现A和B似乎都对,但是这里只要上升下降,无需相同,因此选择A。
39,C
我们看上面,发现上面求的是1情况,下面当然要求0情况,上面是i,下面是也因该是j,故此选择C。
40,C
这题因为有两个状态,肯定是要使用一个判断求两个状态的,AB单状态排除。
本题是求max的,那么排除D,选择C。