2013错题整理集

题目答案

A

题目解析

从题中右图 A_0A0​出发深度优先遍历,有 44 种可能的路径 (A0, A1, A3, A2)(A0, A3, A1, A2)(A0, A2, A1, A3)(A0, A2, A3, A1)(A0​,A1​,A3​,A2​)(A0​,A3​,A1​,A2​)(A0​,A2​,A1​,A3​)(A0​,A2​,A3​,A1​)。因此选项 (A0, A1, A2, A3)(A0​,A1​,A2​,A3​) 不是不可能的。

题目答案

C

题目解析

欧几里得算法用来计算 a 和 b 的最大公约数。

题目答案

0,1, 1, 1。

题目解析

由题意可以列出以下方程组:

( s1+s2 ) mod2=1

( s3+s4 ) mod2=0

( s2+s3 ) mod2=0

( s1+s2+s3 ) mod2=0

( s1 ) mod2=0

解得 s1 = 0, s2 = 1, s3 = 1, s4 = 1。由此可见,这个系统并不安全,多次问答的过程会导致密码泄露。事实上,只要该系统要求用户以 p(0<p<0.5​)的概率故意答错,就能有效地避免窃听。可以证明,此时即使所有通信被泄露,破解密码也是非常难的。

 

题目答案

填空位置 ①:

n - p + i

填空位置 ②:

a[i]

填空位置 ③:

n

填空位置 ④:

i - p + 1

填空位置 ⑤:

a[i - p]

题目解析

本题一共给出了 2 种算法:

第一种是开一个临时数组,将后 n−p 个数和前 p个数依次拷贝到临时数组中,再把临时数组复制给当前数组。这一朴素的算法时间和空间复杂度均为O(n)。

第二种是每次把整个数组往左移一位(最左边的移到最后),这样左移 p 次即是最终的数组。省去了 O(n)的临时空间,但是时间复杂度上升至O(n2)。

事实上还存在第三种算法,在时间和空间上结合了前两个算法的优点,具体做法是:取 p 和 n - p 之间的较小值,设为 q,对调前 q 个和后 q 个元素,然后递归处理剩下长度为 n -2q的子序列。具体代码实现读者可以参看提高组试题和解答。

 

题目答案

填空位置 ①:

cur < upper_bound

填空位置 ②:

a[root].right_child

填空位置 ③:

cur

填空位置 ④:

upper_bound

填空位置 ⑤:

1

题目解析

题目要求检查输入的二叉树是否为二叉查找树,试题中使用了一个较为巧妙的函数is_bst来判断:

a)当前子树是否为二叉查找树

b)当前子树所有的值是否在区间 [lower_bound,upper_bound]内。

初始时,我们从根节点出发,并将 lower_bound,upper_bound 分别设为无穷小、无穷大。我们去检验当前该点值是否符合传递下来的范围,也就是是否在区间 [lower\_bound, upper\_bound]内。然后,检验左子树是否是二叉查找树,右子树是否是二叉查找树,如果 22 个子树都是二叉查找树,同时当前点的值也在范围内,说明以当前点为根的树也是二叉查找树。

剩下的问题就是如何检验子树是否是二叉查找树,这个问题利用递归就可以来解决,直接调用is_bst,同时传递子树以及更新边界的值,即[lower_bound,upper_bound],如果是左子树则将 upper\_bound修改为 cur,如果是右子树则将 lower\_bound修改为 cur。直到发现root == 0也就是当前点为空,证明递归到终点。

 题目答案

A

题目解析

方法:按权值展开

思路:分步解决整数部分和小数部分

 

 

题目答案

A

题目解析

i = 1;
do {
    sum += i;
    i++;
} while (i <= 100);

可以正确的计算 1,2,3,…,100之和。

i = 1;
do {
    sum += i;
    i++;
} while (i > 100);
i = 1;
while (i >= 100) {
    sum += i;
    i++;
}

循环执行条件是 i>100,在 i 初始等于 1 的情况下,循环不会被执行。

i = 1;
while (i < 100) {
    sum += i;
    i++;
}

则只能求 1 至 99的和。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值