2011年10月27日
摘要:
转自:http://zhedahht.blog.163.com/blog/static/254111742009101524946359/ 题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。 分析:玩过麻将的都知道,骰子一共6个面,每个面上都有一个点数,对应的数字是1到 6之间的一个数字。所以,n个骰子的点数和的最小值为n,最大值为6n。因此,一个直观的思路就是定义一个长度为6n-n的数组,和为S的点数出现的次数保存到数组第S-n个元素里。另外,我们还知道n个骰子的所有点数的排列数6^n。一旦我们统计出每一点数出现的次数之后,因此只要把每一点.
阅读全文
posted @ 2011-10-27 15:27
白草黒尖
阅读(1746)
推荐(0)
摘要:
转自:http://zhedahht.blog.163.com/blog/static/254111742009101563242535/ 题目:实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。 分析:这是一道看起来很简单的问题。可能有不少的人在看到题目后30秒写出如下的代码:double Power(double base, int exponent){ double result = 1.0; for(int i = 1; i <= exponent; ++i) ...
阅读全文
posted @ 2011-10-27 14:41
白草黒尖
阅读(297)
推荐(0)
摘要:
转自:http://zhedahht.blog.163.com/blog/static/2541117420105146828433/ 题目:设计一个类,我们只能生成该类的一个实例。 分析:只能生成一个实例的类是实现了Singleton模式的类型。 由于设计模式在面向对象程序设计中起着举足轻重的作用,在面试过程中很多公司都喜欢问一些与设计模式相关的问题。在常用的模式中,Singleton是唯一一个能够用短短几十行代码完整实现的模式。因此,写一个Singleton的类型是一个很常见的面试题。 事实上,要让一个类型是能创建一个实例不是一件很难的事情。我们可以把该类型的构造函数设为private,.
阅读全文
posted @ 2011-10-27 13:02
白草黒尖
阅读(291)
推荐(0)
2011年10月26日
摘要:
转自:http://zhedahht.blog.163.com/blog/static/25411174201063105120425/ 题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。 分析:可能很多人都写过判断一个字符串是不是对称的函数,这个题目可以看成是该函数的加强版。 要判断一个字符串是不是对称的,不是一件很难的事情。我们可以先得到字符串首尾两个字符,判断是不是相等。如果不相等,那该字符串肯定不是对称的。否则我们接着判断里面的两个字符是不是相等,以此类推。基于这个思路,我们不难写.
阅读全文
posted @ 2011-10-26 23:01
白草黒尖
阅读(311)
推荐(1)
摘要:
转自:http://zhedahht.blog.163.com/blog/static/25411174201081263815813/ 题目:输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。二叉树的结点定义如下:struct TreeNode{ int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight;}; 分析:求数中两个结点的最低共同结点是面试中经常出现的一个问题,这个问题至少有两个变种: 第一变种是二叉树是一种特殊的二叉树:查找二叉树,也就是树是排序过的,位于左子树上的结点都比父结点小,而位于右子树的结点都...
阅读全文
posted @ 2011-10-26 22:27
白草黒尖
阅读(453)
推荐(0)
摘要:
题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。(类似于《编程之美》中的“寻找发帖水王”) 分析:这是一道广为流传的面试题,包括百度、微软和Google在内的多家公司都曾经采用过这个题目。要几十分钟的时间里很好地解答这道题,除了较好的编程能力之外,还需要较快的反应和较强的逻辑思维能力。 看到这道题,我们马上就会想到,要是这个数组是排序的数组就好了。如果是排序的数组,那么我们只要遍历一次就可以统计出每个数字出现的次数,这样也就能找出符合要求的数字了。题目给出的数组没有说是排好序的,因此我们需要给它排序。排序的时间复杂度是O(nlogn),再加上遍历的时间复杂度O(n),因此.
阅读全文
posted @ 2011-10-26 20:00
白草黒尖
阅读(268)
推荐(0)
摘要:
转自:http://zhedahht.blog.163.com/blog/static/254111742010819104710337/ 题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL,请完成函数ComplexNode* Clone(ComplexNode* pHead),以复制一个复杂链表。struct ComplexNode{ int m_nValue; ComplexNode* m_pNext; ComplexNode* m_pSibling;}; 下图是一个含有5个结点的该类...
阅读全文
posted @ 2011-10-26 19:38
白草黒尖
阅读(821)
推荐(1)
摘要:
转自:http://zhedahht.blog.163.com/blog/static/254111742011125100605/ 题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。 分析:5的二进制是101,17的二进制10001。还是试着把计算分成三步:第一步各位相加但不计进位,得到的结果是10100(最后一位两个数都是1,相加的结果是二进制的10。这一步不计进位,因此结果仍然是0);第二步记下进位。在这个例子中只在最后一位相加时产生一个进位,结果是二进制的10;第三步把前两步的结果相加,得到的结果是10110,正好是22。由此可见三步走的策略
阅读全文
posted @ 2011-10-26 15:26
白草黒尖
阅读(331)
推荐(0)
摘要:
转自:http://zhedahht.blog.163.com/blog/static/2541117420114172812217/ 题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 假设想在长度为n的字符串中求m个字符的组合,先从头扫描字符串的第一个字符。针对第一个字符,有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;而是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。这两种选择都很容易用递归实现。下面是这种思路的参考代码:void Co.
阅读全文
posted @ 2011-10-26 10:57
白草黒尖
阅读(261)
推荐(1)
摘要:
转帖:http://zhedahht.blog.163.com/blog/static/254111742007499363479/ 题目:输入一个字符串,打印出该字符串中字符的所有排列,如字符串abc,则输出由字符a、b、c所能排列出的所有字符串abc、acb、bac、bca、cab和cba。 分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中。 以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc的排列。当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac,接着我们固定第一个字符b.
阅读全文
posted @ 2011-10-26 10:35
白草黒尖
阅读(264)
推荐(0)