摘要: 17.4 编写一个方法,找出两个数字中最大的那一个。不得使用if-else或其他比较运算符。解法:我们可以通过一步步的分析来将需要用到的if-else和比较操作符去掉:If a > b, return a; else, return b.If (a - b) using namespace std;... 阅读全文
posted @ 2014-12-11 22:04 Jessica程序猿 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 17.3写一个算法计算n的阶乘末尾0的个数?解答:首先,算出n的阶乘的结果再去计算末尾有多少个0这种方法是不可取的, 因为n的阶乘是一个非常大的数,分分种就会溢出。我们应当去分析, 是什么使n的阶乘结果末尾出现0。n阶乘末尾的0来自因子5和2相乘,5*2=10。因此,我们只需要计算n的阶乘里, 有多... 阅读全文
posted @ 2014-12-11 21:39 Jessica程序猿 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 17.2 设计一个算法,判断玩家是否赢了井字游戏。解法:假设这个检查某人是否赢得了井字游戏的函数为HasWon,那么我们第一步要向面试官确认, 这个函数是只调用一次,还是要多次频繁调用。如果是多次调用, 我们可以通过预处理来得到一个非常快速的版本。方法一:如果HasWon函数需要被频繁调用对于井字游... 阅读全文
posted @ 2014-12-11 21:04 Jessica程序猿 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 17.1 编写一个函数,不用临时变量,直接交换两函数。解法:方法一:这个是经典面试题,也相当直接。我们将用a0表示a的初值,b0表示b的初始值,用diff表示a0-b0的值。让我们将a>b的情形绘制在数轴上。首先,将a设为diff,即上面数轴的右边那一段。然后,b加上diff(并将结果保存在b中),... 阅读全文
posted @ 2014-12-11 20:03 Jessica程序猿 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 13.10 用C编写一个my2DALLoc函数,可分配二维数组。将malloc函数的调用次数降到最少,并确保可通过arr[i][j]访问该内存。解法:这道题目最简单的方法就是先开一个数组来存储指向每一行的指针, 然后再为每一行动态地分配空间。这是非常常见的动态申请二维数组空间的方法:int** My... 阅读全文
posted @ 2014-12-11 15:11 Jessica程序猿 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 13.9 编写支持对齐分配的malloc和free函数,分配内存时,malloc函数返回的地址必须都能被2的n次方整除。解法: 一般来说,使用malloc,我们控制不了分配的内存会在堆里哪个位置。我们只会得到一个指向内存块的指针,指针的起始地址不定。要克服这些限制条件,我们必须申请足够大的内存,要... 阅读全文
posted @ 2014-12-11 14:52 Jessica程序猿 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 13.8 编写一个智能指针类。智能指针是一种数据类型,一般用模板实现,模拟指针行为的同时还提供自动垃圾回收机制。它会自动记录SmartPointer对象的引用计数,一旦T类型对象的引用计数为零,就会释放该对象。解法:智能指针跟普通指针一样,但他借助自动化内存管理保证了安全性,避免了诸如悬挂指针、内存... 阅读全文
posted @ 2014-12-11 12:59 Jessica程序猿 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 13.7写一个函数,其中一个参数是指向Node结构的指针,返回传入数据结构的一份完全拷贝。 Node结构包含两个指针,指向另外两个Node。C++实现代码:typedef map NodeMap;Node* copy_recursive(Node *cur, NodeMap &nodeMap){ ... 阅读全文
posted @ 2014-12-11 11:38 Jessica程序猿 阅读(110) 评论(0) 推荐(0) 编辑