题目答案
B
题目解析
本题考察数据结构基础知识。栈顶为hs
,此时s
要进栈,由于是链式栈,所以首先将s
的下一个节点位置指向hs
,然后把hs
指向s
所指向的地址。
题目答案
D
题目解析
考察算法基础知识。归并排序当有一方为空的时候,就可以不用再进行比较,直接将另一方剩余元素接在数组后面即可。否则每进行一次比较,均有一个元素可以接到数组后面,故总比较次数为:总元素个数减去一方为空时另一方的剩余元素个数。
所以最少的剩余元素个数是 1,最多比较次数为 2n−1 次。
题目答案
C
题目答案
填空位置 ①:
1009
填空位置 ②:
1008
题目解析
本题考查发现数学规律的能力。可以发现,对于第 4n 轮,坐标均为(−2n,2n)。因此,2016 轮后,坐标变为(−1008,1008)。从 2016轮的位置到 2017 轮,走步的方法为向右走 2017 个单位,因此坐标变为(1009,1008)。
题目答案
填空位置 ①:
1 3
填空位置 ②:
2017 1
题目解析
此程序有两个关键变量x
和y
。x
的值从 1 到 n 再到 1 循环;y
的值从 1 到 m 再到 1 循环。程序求的是x
和y
同时变为边界值时,边界值为多少。观察发现x
周期为 2n−2,y
周期为 2m−2。因此,对 n−1 与 m−1 求最小公倍数 D,用 D 分别除以 n−1 和 m−1,观察结果。如果结果为偶数,那么对应的值为 1,否则为 n 或 m。
分析功能可知,该程序是模拟一个初始位于一个长为 n,宽为 m 的盒子内的左下角有一个小球初始向正右上方向移动,碰到盒子边界之后就会完全反弹,求第二次碰到盒子时小球的坐标,通过画图模拟也可以得出结果。
题目答案
填空位置 ①:
count = count + len[i]
填空位置 ②:
count < m
填空位置 ③:
lbound < ubound
填空位置 ④:
(lbound + ubound + 1) / 2
填空位置 ⑤:
count = count +len[i] / mid
题目解析
本题主要考查二分算法和贪心算法。二分算法中间的for
循环使用贪心算法计算能够切割出的绳段个数。
结合第 ①② 空可知,当绳段长度为 1 时可以切出的绳段个数最多,即所有绳子的长度相加,所以输出Failed
的条件应该是所有绳子的总长度小于 m。故用count
计算总长度,第 ① 空填count=count+len[i]
或count+=len[i]
,第二空填count<m
或m>count
。
第 ③④⑤ 空均在二分里,第 ③ 空是二分的结束条件,故应该填lbound<ubound
或者ubound>lbound
,即当前二分的区间长度还大于 11 的时候,说明没有确定最终值是多少。第 ④ 空需要特别注意,由于底下ubound
是通过mid-1
,lbound
是通过mid
来更新的,所以这空需要填(lbound+ubound+1)/2
或(lbound+ubound+1)>>1
或(lbound+ubound)/2+1
,三者意思相同。
第 ⑤ 空是用来求当确定绳子的切割长度为mid
后,最多能切多少段绳段,故应该填count=count+len[i]/mid
或者count+=len[i]/mid
。