系统检测到您的帐号可能存在被盗风险,请尽快
,并立即
。 | 网易博客安全提醒:
系统检测到您当前密码的安全性较低,为了您的账号安全,建议您适时修改密码 | | 宝鸡启明星小学同步辅导中心
开启智慧之门 明确成才之钥 培育未来新星
导航 日志 一道比较难度的时钟问题 2006-11-22 10:47:17
| 分类:
| 标签:
小 从0点到12点,时钟的分针和时针会多次重叠。这些重叠的时刻全部相加,总计时为多少小时。 雪帆提示:追及问题 参考***:72小时 评论这张
转发至微博
人 | 分享到: 阅读(
举报 历史上的今天
相关文章
最近读者
this.p={
id:'fks_085066086087085075082094095095093085081074083087094069',
blogTitle:'一道比较难度的时钟问题',
blogA tract:'
从0点到12点,时钟的分针和时针会多次重叠。这些重叠的时刻全部相加,总计时为多少小时。 雪帆提示:追及问题 参考***:72小时
blogTag:'',
blogUrl:'blog/static/9309718620061022104717737',
isPublished:1,
istop:false,
type:0,
modifyTime:1164163637737,
publishTime:1164163637737,
permalink:'blog/static/9309718620061022104717737',
commentCount:0,
mainCommentCount:0,
recommendCount:0, rk:-100,
publisherId:0,
recomBlogHome:false,
attachmentsFileIds:[],
vote:{},
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'河北',
visitorCity:'廊坊',
isWeekend:true,
taobaoVersion:6,
taobaolink:"http://g.163.com/a?CID=4399&Values=3931351846&Redirect=http://ju.atpanel.com/?url=http://www.tmall.com/?ad_id=100040497852881d4a61&am_id=&cm_id= m_id=",
taobaobgimage:"http://blog.163.com/newpage/images/taobaolayerbg5.jpg",
mset:'000',
mcon:'',
srk:-100,
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false
{list a as x}
{if !!x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
{/list}
{if !!a}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
{if !!x}
{/list}
推荐过这篇日志的人:
{list a as x}
{if !!x}
{/list}
{if !! .length>0}
他们还推荐了:
{list b as y}
{if !!y}
{/list}
引用记录:
{list d as x}
{/list}
{list a as x}
{if !!x}
{/list}
{list a as x}
{if !!x}
{/list}
{list a as x}
{if !!x}
{/list}
{list a as x}
{if x_index>9}{break}{/if}
{if !!x}
${fn2(parseInt(x.date),'yyyy-MM-dd HH:mm: ')}
{/list}
{list a as x}
{if x_index>4}{break}{/if}
{if !!x}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm: ')}
{/list}
最新日志
该作者的其他文章
博主推荐
相关日志
随机阅读
首页推荐 {list a as x}
{if !!x} 投票给
{var first_option = true;}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if} “${b[voteToOption_index]}” {/if}
{/list}
{if (x.role!="-1") },“我是${c[x.role]}” {/if} ${fn1(x.voteTime)}
{if x.userName==''}{/if}
{/list} 页脚
- 网易公司版权所有 copy;1997-2011 {list wl as x}
{list x.l as y}
{/list}
{/list}
{if defined('wl')}
{list wl as x}
{/list}
DNS解析不正常的朋友,可以使用www.cnchi.com登陆春秋。同时请大家牢记春秋这个备用域名!!!www.CNchi.com
微软的面试题
贴图专区
157152 帖子
68216 主题
122 精华
238 积分
83854 宣传点
0 点 春秋币
5 枚 鲜花
838 朵 铜板
402726 文 从哪里知道本站
网站连接 阅读权限
10 性别
男 注册时间
2005-01-12 最后登录
2011-07-20 贴图专区
157152 精华
238 积分
83854 宣传点
0 点 春秋币
5 枚 注册时间
2005-01-12 最后登录
2011-07-20 跳转到
字体大小:
发表于 2007-02-08 14:46
微软的面试题
微软的面试题
A:超级推理
春秋中文社区http:// .cqzg.cn
1、你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费?
2、请把一盒蛋糕切成8份,分给8个人,但蛋糕盒里还必须留有一份。
3、小明一家过一座桥,过桥时是黑夜,所以必须有灯。现在小明过桥要1秒,小明的弟弟要3秒,小明的爸爸要6秒,小明的妈妈要8秒,小明的爷爷要12秒。每次此桥最多可过两人,而过桥的速度依过桥最慢者而定,而且灯在点燃后30秒就会熄灭。问:小明一家如何过桥?
4、一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其他人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什么帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子?
5、请估算一下CN TOWER电视塔的质量。
6、一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从一楼到十楼,每层楼电梯门都会打开一次,只能拿一次钻石,问怎样才能拿到最大的一颗?
7、U2合唱团在17分钟内得赶到演唱会场,途中必需跨过一座桥,四个人从桥的同一端出发,你得帮助他们到达另一端,天色很暗,而他们只有一只手电筒。一次同时最多可以有两人一起过桥,而过桥的时候必须持有手电筒,所以就得有人把手电筒带来带去,来回桥两端。手电筒是不能用丢的方式来传递的。四个人的步行速度各不同,若两人同行则以较慢者的速度为准。Bono需花1分钟过桥,Edge需花2分钟过桥,Adam需花5分钟过桥,Larry需花10分钟过桥。他们要如何在17分钟内过桥呢?
8、烧一根不均匀的绳要用一个小时,如何用它来判断半个小时
春秋中文社区http:// .cqzg.cn
春秋中文社区http:// .cqzg.cn
9、为什么下水道的盖子是圆的?
春秋中文社区http:// .cqzg.cn
10、美国有多少辆加油站(汽车)?
11、有7克、2克砝码各一个,天平一只,如何只用这些物品三次将140克的盐分成50、90克各一份?
12、有一辆火车以每小时15公里的速度离开洛杉矶直奔纽约,另一辆火车以第小时20公里的速度从纽约开往洛杉矶。如果有一只鸟,以外30公里每小时的速度和两辆火车现时启动,从洛杉矶出发,碰到另辆车后返回,依次在两辆火车来回的飞行,直道两面辆火车相遇,请问,这只小鸟飞行了多长距离?
13、你有两个罐子,50个红色弹球,50个蓝色弹球,随机选出一个罐子,随机选取出一个弹球放入罐子,怎么给红色弹球最大的选中机会?在你的计划中,得到红球的准确几率是多少?
春秋中文社区http:// .cqzg.cn
14、想象你在镜子前,请问,为什么镜子中的影像可以颠倒左右,却不能颠倒上下?
15、你有四人装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的重量+1.只称量一次,如何判断哪个罐子的药被污染了?
16、如果你有无穷多的水,一个3夸脱的和一个5夸脱的提桶,你如何准确称出4夸脱的水?
春秋中文社区http:// .cqzg.cn
17、你有一桶果冻,其中有***,绿色,红色三种,,闭上眼睛选出同样颜色的两个,抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻?
18、将汽车钥匙插入车门,向哪个方向旋转就可以打开车锁?
19、如果要你能去掉50个州的任何一个,那你去掉哪一个,为什么?
春秋中文社区http:// .cqzg.cn
20、对一批编号为1~100 全部开关朝上开的灯进行以下操作
凡是1 的倍数反方向拨一次开关2 的倍数反方向又拨一次开关3 的倍数反方向又拨一次开关。
问最后为关熄状态的灯的编号。
21、假设一张圆盘像唱机上的唱盘那样转动。这张盘一半是黑色,一半是白色。假设你有数量不限的一些颜色传感器。要想确定圆盘转动的方向,你需要在它周围摆多少个颜色传感器?它们应该被摆放在什么位置?
22、假设时钟到了12点。注意时针和分针重叠在一起。在一天之中,时针和分针共重叠多少次?你知道它们重叠时的具体时间吗?
23、中间只隔一个数字的两个奇数被称为奇数对,比如17和19。证明奇数对之间的数字总能被6整除(假设这两个奇数都大于6)。现在证明没有由三个奇数组成的奇数对。
春秋中文社区http:// .cqzg.cn
春秋中文社区http:// .cqzg.cn
24、一个屋子有一个门(门是关闭的)和3盏电灯。屋外有3个开关,分别与这3盏灯相连。你可以随意操纵这些开关,可一旦你将门打开,就不能变换开关了。确定每个开关具体管哪盏灯。
25、假设你有8个球,其中一个略微重一些,但是找出这个球的惟一方法是将两个球放在天平上对比。最少要称多少次才能找出这个较重的球?
26、下面玩一个拆字游戏,所有字母的顺序都被打乱。你要判断这个字是什么。假设这个被拆开的字由5个字母组成:
1.共有多少种可能的组合方式?
2.如果我们知道是哪5个字母,那会怎么样?
3.找出一种解决这个问题的方法。
楼主热帖
理性、包容、思辨、独创, 多元、卓越、友善、发展 。
传承中华文明,研究大国战略,回眸历史瞬间,展望民族未来。
贴图专区
157152 帖子
68216 主题
122 精华
238 积分
83854 宣传点
0 点 春秋币
5 枚 鲜花
838 朵 铜板
402726 文 从哪里知道本站
网站连接 阅读权限
10 性别
男 注册时间
2005-01-12 最后登录
2011-07-20 贴图专区
157152 精华
238 积分
83854 宣传点
0 点 春秋币
5 枚 注册时间
2005-01-12 最后登录
2011-07-20 发表于 2007-02-08 14:47
27、有4个女人要过一座桥。她们都站在桥的某一边,要让她们在17分钟内全部通过这座桥。这时是晚上。她们只有一个手电筒。最多只能让两个人同时过桥。不管是谁过桥,不管是一个人还是两个人,必须要带着手电筒。手电筒必须要传来传去,不能扔过去。每个女人过桥的速度不同,两个人的速度必须以较慢的那个人的速度过桥。
第一个女人:过桥需要1分钟;
春秋中文社区http:// .cqzg.cn
第二个女人:过桥需要2分钟;
第三个女人:过桥需要5分钟;
第四个女人:过桥需要10分钟。
比如,如果第一个女人与第4个女人首先过桥,等她们过去时,已经过去了10分钟。如果让第4个女人将手电筒送回去,那么等她到达桥的另一端时,总共用去了20分钟,行动也就失败了。怎样让这4个女人在17分钟内过桥?还有别的什么方法?
28、如果你有两个桶,一个装的是红色的颜料,另一个装的是蓝色的颜料。你从蓝色颜料桶里舀一杯,倒入红色颜料桶,再从红色颜料桶里舀一杯倒入蓝颜料桶。两个桶中红蓝颜料的比例哪个更高?通过算术的方式来证明这一点。
B:疯狂计算
29、已知两个1~30之间的数字,甲知道两数之和,乙知道两数之积。
甲问乙:你知道是哪两个数吗?乙说:不知道;
春秋中文社区http:// .cqzg.cn
乙问甲:你知道是哪两个数吗?甲说:也不知道;
于是,乙说:那我知道了;
随后甲也说:那我也知道了;
春秋中文社区http:// .cqzg.cn
这两个数是什么?
30、4,4,10,10,加减乘除,怎么出24点?
春秋中文社区http:// .cqzg.cn
31、1000!有几位数,为什么?
春秋中文社区http:// .cqzg.cn
32、F(n)=1 gt;8 lt;12
F(n)=2 lt;2
F(n)=3 n=6
F(n)=4 n=other
使用+ - * /和sign(n)函数组合出F(n)函数
sign(n)=0 n=0
春秋中文社区http:// .cqzg.cn
sign(n)=-1 lt;0
sign(n)=1 gt;0
33、编一个程序求质数的和例如F(7)=1+3+5+7+11+13+17=58
春秋中文社区http:// .cqzg.cn
34、。。。
请仅用一支笔画四根直线将上图9 各点全部连接
35、三层四层二叉树有多少种
春秋中文社区http:// .cqzg.cn
春秋中文社区http:// .cqzg.cn
36、1--100000 数列按一定顺序排列,有一个数字排错,如何纠错?写出最好方法。两个数字呢?
37、链接表和数组之间的区别是什么?
38、做一个链接表,你为什么要选择这样的方法?
春秋中文社区http:// .cqzg.cn
春秋中文社区http:// .cqzg.cn
39、选择一种算法来整理出一个链接表。你为什么要选择这种方法?现在用O(n)时间来做。
40、说说各种股票分类算法的优点和缺点。
春秋中文社区http:// .cqzg.cn
41、用一种算法来颠倒一个链接表的顺序。现在在不用递归式的情况下做一遍。
春秋中文社区http:// .cqzg.cn
42、用一种算法在一个循环的链接表里插入一个节点,但不得穿越链接表。
43、用一种算法整理一个数组。你为什么选择这种方法?
44、用一种算法使通用字符串相匹配。
45、颠倒一个字符串,优化速度,优化空间。
46、颠倒一个句子中的词的顺序,比如将我叫克丽丝转换为克丽丝叫我,实现速度最快,移动最少。
47、找到一个子字符串,优化速度,优化空间。
48、比较两个字符串,用O(n)时间和恒量空间。
春秋中文社区http:// .cqzg.cn
49、假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗?
50、不用乘法或加法增加8倍。现在用同样的方法增加7倍。
春秋中文社区http:// .cqzg.cn
C:创造性应用
51、营业员***由于工作失误,将2万元的笔记本电脑以1.2万元错卖给李先生,王***的经理怎么写信给李先生试图将钱要回来?
理性、包容、思辨、独创, 多元、卓越、友善、发展 。
传承中华文明,研究大国战略,回眸历史瞬间,展望民族未来。
贴图专区
157152 帖子
68216 主题
122 精华
238 积分
83854 宣传点
0 点 春秋币
5 枚 鲜花
838 朵 铜板
402726 文 从哪里知道本站
网站连接 阅读权限
10 性别
男 注册时间
2005-01-12 最后登录
2011-07-20 贴图专区
157152 精华
238 积分
83854 宣传点
0 点 春秋币
5 枚 注册时间
2005-01-12 最后登录
2011-07-20 发表于 2007-02-08 14:48
52、如何将计算机技术应用于一幢100层高的办公大楼的电梯系统上?你怎样优化这种应用?工作日时的交通、楼层或时间等因素会对此产生怎样的影响?
53、你如何对一种可以随时存在文件中或从因特网上拷贝下来的操作系统实施保护措施,防止被非法复制?
春秋中文社区http:// .cqzg.cn
54、你如何重新设计自动取款机?
55、假设我们想通过电脑来操作一台微波炉,你会开发什么样的软件来完成这个任务?
56、你如何为一辆汽车设计一台咖啡机?
春秋中文社区http:// .cqzg.cn
56、如果你想给微软的Word系统增加点内容,你会增加什么样的内容?
57、你会给只有一只手的用户设计什么样的键盘?
58、你会给失聪的人设计什么样的闹钟?
E:参考***
1、day1 给1 段,
day2 让工人把1 段归还给2 段,
day3 给1 段,
day4 归还1 2 段,给4 段。
day5 依次类推……
春秋中文社区http:// .cqzg.cn
2、面对这样的怪题,有些应聘者绞尽脑汁也无法分成;而有些应聘者却感到此题实际很简单,把切成的8份蛋糕先拿出7份分给7人,剩下的1份连蛋糕盒一起分给第8个人。
4、假如只有一个人戴黑帽子,那他看到所有人都戴白帽,在第一次关灯时就应自打耳光,所以应该不止一个人戴黑帽子;如果有两顶黑帽子,第一次两人都只看到对方头上的黑帽子,不敢确定自己的颜色,但到第二次关灯,这两人应该明白,如果自己戴着白帽,那对方早在上一次就应打耳光了,因此自己戴的也是黑帽子,于是也会有耳光声响起;可事实是第三次才响起了耳光声,说明全场不止两顶黑帽,依此类推,应该是关了几次灯,有几顶黑帽。
5、比如你怎样快速估算支架和柱子的高度、球的半径,算出各部分的体积等等。招聘官的说法:就CNTOWER这道题来说,它和一般的谜语或智力题还是有区别的。我们称这类题为’快速估算题’,主要考的是快速估算的能力,这是开发软件必备的能力之一。当然,题目只是手段,不是目的,最终得到一个结果固然是需要的,但更重要的是对考生得出这个结果的过程也就是方法的考察。Mr Miller为记者举例说明了一种比较合理的答法,他首先在纸上画出了CN TOWER的草图,然后快速估算支架和各柱的高度,以及球的半径,算出各部分体积,然后和各部分密度运算,最后相加得出一个结果。
这一类的题目其实很多,如:估算一下密西西比河里的水的质量。如果你是田纳西州州长,请估算一下治理好康柏兰河的污染需要多长时间。
估算一下一个行进在小雨中的人5分钟内身上淋到的雨的质量。
Mr Miller接着解释道:像这样的题目,包括一些推理题,考的都是人的ProblemSolving(解决问题的能力),不是哪道题你记住了***就可以了的。
对于公司招聘的宗旨,Mr Miller强调了四点,这些是有创造性的公司普遍注重的员工素质,是想要到知名企业实现自己的事业梦想的人都要具备的素质和能力。
要求一:RawSmart(纯粹智慧),与知识无关。
要求二:Long-termPotential(长远学习能力)。
要求三:TechnicSkills(技能)。
要求四:Profe ionalism(职业态度)。
春秋中文社区http:// .cqzg.cn
6、她的回答是:选择前五层楼都不拿,观察各层钻石的大小,做到心中有数。后五层楼再选择,选择大小接近前五层楼出现过最大钻石大小的钻石。她至今也不知道这道题的准确***,也许就没有准确***,就是考一下你的思路,她如是说。
春秋中文社区http:// .cqzg.cn
7、分析:有个康奈尔的学生写文章说他当时在微软面试时就是碰到了这道题,最短只能做出在19分钟内过桥。
8、两边一起烧。
9、***之一:从麻省理工大学一位计算机系教授那里听来的***,首先在同等用材的情况下他的面积最大。第二因为如果是方的、长方的或椭圆的,那无聊之徒拎起来它就可以直接扔进地下道啦!但圆形的盖子嘛,就可以避免这种情况了)
春秋中文社区http:// .cqzg.cn
10、这个乍看让人有些摸不着头脑的问题时,你可能要从问这个国家有多少小汽车入手。面试者也许会告诉你这个数字,但也有可能说:我不知道,你来告诉我。那么,你对自己说,美国的人口是2.75亿。你可以猜测,如果平均每个家庭(包括单身)的规模是2.5人,你的计算机会告诉你,共有1.1亿个家庭。你回忆起在什么地方听说过,平均每个家庭拥有1.8辆小汽车,那么美国大约会有1.98亿辆小汽车。接着,只要你算出替1.98亿辆小汽车服务需要多少加油站,你就把问题解决了。重要的不是加油站的数字,而是你得出这个数字的方法。
12、***很容易计算的:
假设洛杉矶到纽约的距离为s
那小鸟飞行的距离就是(s/(15+20))*30。
13、无***,看你有没有魄力坚持自己的意见。
14、因为人的两眼在水平方向上对称。
15、从第一盒中取出一颗,第二盒中取出2 颗,第三盒中取出三颗。
依次类推,称其总量。
16、比较复杂:
A、先用3 夸脱的桶装满,倒入5 夸脱。以下简称3-5)
在5 夸脱桶中做好标记b1,简称b1)。
春秋中文社区http:// .cqzg.cn
B、用3 继续装水倒满5 空3 将5 中水倒入3 直到b1 在3 中做标记b2
春秋中文社区http:// .cqzg.cn
C、用5 继续装水倒满3 空5 将3 中水倒入5 直到b2
D、空3 将5 中水倒入3 标记为b3
春秋中文社区http:// .cqzg.cn
E、装满5 空3 将5 中水倒入3 直到3 中水到b3
结束了,现在5 中水为标准的4 夸脱水。
春秋中文社区http:// .cqzg.cn
20、素数是关,其余是开。
理性、包容、思辨、独创, 多元、卓越、友善、发展 。
传承中华文明,研究大国战略,回眸历史瞬间,展望民族未来。
贴图专区
157152 帖子
68216 主题
122 精华
238 积分
83854 宣传点
0 点 春秋币
5 枚 鲜花
838 朵 铜板
402726 文 从哪里知道本站
网站连接 阅读权限
10 性别
男 注册时间
2005-01-12 最后登录
2011-07-20 贴图专区
157152 精华
238 积分
83854 宣传点
0 点 春秋币
5 枚 注册时间
2005-01-12 最后登录
2011-07-20 发表于 2007-02-08 14:49
29、允许两数重复的情况下
春秋中文社区http:// .cqzg.cn
***为x=1,y=4;甲知道和A=x+y=5,乙知道积B=x*y=4
不允许两数重复的情况下有两种***
***1:为x=1,y=6;甲知道和A=x+y=7,乙知道积B=x*y=6
***2:为x=1,y=8;甲知道和A=x+y=9,乙知道积B=x*y=8
春秋中文社区http:// .cqzg.cn
解:
设这两个数为x,y.
春秋中文社区http:// .cqzg.cn
甲知道两数之和 A=x+y;
春秋中文社区http:// .cqzg.cn
乙知道两数之积 B=x*y;
春秋中文社区http:// .cqzg.cn
该题分两种情况 :
允许重复, 有(1 = x = y = 30);
不允许重复,有(1 = x y = 30);
当不允许重复,即(1 = x y = 30);
春秋中文社区http:// .cqzg.cn
1)由题设条件:乙不知道***
= B=x*y 解不唯一
= B=x*y 为非质数
又∵ x ≠ y
∴ B ≠ k*k (其中k∈N)
结论(推论1):
B=x*y 非质数且 B ≠ k*k (其中k∈N)
即:B ∈(6,8,10,12,14,15,18,20...)
证明过程略。
2)由题设条件:甲不知道***
= A=x+y 解不唯一
= A = 5;
分两种情况:
A=5,A=6时x,y有双解
A=7 时x,y有三重及三重以上解
假设 A=x+y=5
则有双解
x1=1,y1=4;
x2=2,y2=3
春秋中文社区http:// .cqzg.cn
代入公式B=x*y:
B1=x1*y1=1*4=4;(不满足推论1,舍去)
B2=x2*y2=2*3=6;
得到唯一解x=2,y=3即甲知道***。
与题设条件:甲不知道***相矛盾 ,
故假设不成立,A=x+y≠5
假设 A=x+y=6
则有双解。
x1=1,y1=5;
春秋中文社区http:// .cqzg.cn
x2=2,y2=4
代入公式B=x*y:
B1=x1*y1=1*5=5;(不满足推论1,舍去)
B2=x2*y2=2*4=8;
得到唯一解x=2,y=4
即甲知道***
春秋中文社区http:// .cqzg.cn
与题设条件:甲不知道***相矛盾
故假设不成立,A=x+y≠6
当A=7时
春秋中文社区http:// .cqzg.cn
∵ x,y的解至少存在两种满足推论1的解
B1=x1*y1=2*(A-2)
春秋中文社区http:// .cqzg.cn
B2=x2*y2=3*(A-3)
∴ 符合条件
结论(推论2):A = 7
3)由题设条件:乙说那我知道了
=乙通过已知条件B=x*y及推论(1)(2)可以得出唯一解
即:
A=x+y, A = 7
B=x*y, B ∈(6,8,10,12,14,15,16,18,20...)
1 = x y = 30
x,y存在唯一解
当 B=6 时:有两组解
x1=1,y1=6
x2=2,y2=3 (∵ x2+y2=2+3=5 7∴不合题意,舍去)
得到唯一解 x=1,y=6
当 B=8 时:有两组解
春秋中文社区http:// .cqzg.cn
x1=1,y1=8
x2=2,y2=4 (∵ x2+y2=2+4=6 7∴不合题意,舍去)
得到唯一解 x=1,y=8
当 B8 时:容易证明均为多重解
春秋中文社区http:// .cqzg.cn
结论:
春秋中文社区http:// .cqzg.cn
当B=6时有唯一解 x=1,y=6当B=8时有唯一解 x=1,y=8
4)由题设条件:甲说那我也知道了
春秋中文社区http:// .cqzg.cn
= 甲通过已知条件A=x+y及推论(3)可以得出唯一解
综上所述,原题所求有两组解:
x1=1,y1=6
x2=1,y2=8
当x=y时,有(1 = x = y = 30);
春秋中文社区http:// .cqzg.cn
同理可得唯一解 x=1,y=4
解:1000
Lg(1000!)=sum(Lg(n))
n=1
用3 段折线代替曲线可以得到
10(0+1)/2+90(1+2)/2+900(2+3)/2=2390
作为近似结果,好象1500~3000 都算对
32、F(n)=1 gt;8 lt;12
F(n)=2 lt;2
F(n)=3 n=6
F(n)=4 n=other
使用+ - * /和sign(n)函数组合出F(n)函数
春秋中文社区http:// .cqzg.cn
sign(n)=0 n=0
sign(n)=-1 lt;0
:sign(n)=1 gt;0
春秋中文社区http:// .cqzg.cn
解:只要注意[sign(n-m)*sign(m-n)+1]在n=m 处取1 其他点取0 就可以了
34、米字形的画就行了
59、***是和家人告别.
F:公司背景知识
美国微软公司从成立到现在已经走过了25年的历程,从最初的两个人发展到现在的3万多人,并从屈指可数的资金一跃成为世界第二大富豪。微软公司之所以一路顺风,与其高超的用人制度分不开的。
低薪高股,留住顶尖人才
微软是第一家用股票期权来奖励普通员工的企业。微软公司职员可以拥有公司的股份,并可享受15%的优惠,公司高级专业人员可享受更大幅度的优惠,公司还给任职一年的正式雇员一定的股票***特权。微软公司职员的主要经济来源并非薪水,股票升值是主要的收益补偿。公司故意把薪水压得比竞争对手还低,创立了一个低工资高股份的典范,微软公司雇员拥有股票的比率比其他任何上市公司都要高。这种不向员工保证提供某种固定收入或福利待遇,而是将员工的收益与其对企业的股权投资相联系,从而将员工个人利益同企业的效益、管理和员工自身的努力等因素结合起来的做法,具有明显的激励功效。
在当今这个跳槽普遍盛行的时代,为什么微软能够生产数以千计的百万富翁,且对公司忠心耿耿?其原因就是微软建立了一套网罗顶尖人才,珍惜顶尖人才的机制,建立了一种宁缺毋滥,人尽其才的选人用人模式。难怪盖茨坦言:如果把我们公司顶尖的20个人才挖走,那么我告诉你,微软会变成一家无足轻重的公司。也许,这就是微软成功的秘诀所在。
精挑细选,不让最优秀的人才漏网
春秋中文社区http:// .cqzg.cn
根据微软的记录,公司每年接到来自全世界各地的求职申请达12万份。面对如此众多的求职者,比尔•盖茨并不满足,他认为许多令人满意的人才没有注意到微软,因而会使微软漏掉一些最优秀的人。于是,在微软的发展史上曾发生了许多较比尔•盖茨的财产快速增长更加激动人心的寻找人才的故事。据说,不论世界上哪个角落有他满意的人才,他便不惜任何代价将其弄到微软公司。他安排的很多面试,不是在考人家,而是在求人家。用微软研究院副院长杰克•巴利斯的话说,是在推销式面试。有趣的是,微软考官们求人家的时候所迸发出来的那种兴奋感,甚至还要超过考人家。他们知道谁是值得他们恳求的人,其恳求的方式常常会出人预料。在西方记者撰写的关于微软的书籍中,多次提到一件事情:加州硅谷的两位计算机奇才--吉姆•格雷和戈登•贝尔,在微软千方百计的说服下终于同意为微软工作,但他们不喜欢微软总部雷德蒙冬季的霏霏阴雨。比尔•盖茨说,这好办,就在硅谷为他们建立了一个研究院。
知识地图,协调员工与团队的发展
有人把微软比作全世界最大的脑力压榨机。在这座知识工厂里,盖茨是全球知识精英的超级工头。在其带领下,员工的心血智慧结晶为众多畅销软件,使微软成为有史以来最具价值的知识创造型企业。
为了让这一群知识精英能够合作无间,微软的IT团队花费了相当多的时间和精力,建构起一套敏捷的知识管理系统,微软的人员知识地图可以说是这套知识管理系统的最佳代表之一。
春秋中文社区http:// .cqzg.cn
这张知识地图是1995年10月开始制作的。当时,微软的资讯系统小组开展了一项技能规划与开发计划。他们把每个系统开发人员的工作能力和某特定工作所需要的知识制作成地图,以便协助公司维持业界领导地位的能力,同时让员工与团队的配合更加默契。微软的这一计划分为5个主要阶段:为知识能力的形态与程度建立起架构,明确某特定工作所需要的知识;为个别员工在特定工作中的知识能力表现评分;在线上系统执行知识能力的搜寻;将知识模型和教育训练计划结合起来。对于员工的知识能力,微软采用了基础水准能力、地区性或独特性的知识能力、全球水准能力和普遍性能力等四种知识结构形态来评估。当管理者想为新专案建立团队时,他无须知道所有员工中谁符合工作条件,而只要向这个系统咨询就可以了。微软推动知识地图的做法,表现出公司管理阶层重视知识,并支持知识的交流。知识地图不但使员工更容易找到所需的知识,也表明企业知识属于企业全体而非个人。
理性、包容、思辨、独创, 多元、卓越、友善、发展 。
传承中华文明,研究大国战略,回眸历史瞬间,展望民族未来。
发表回复
回帖后跳转到最后一页 (
GMT+8, 2011-08-05 18:54,
Proce ed in 0.333792 second(s), 8 queries, Gzip enabled
Powered by
Discuz!
Lice ed
2001-2009 Comsenz Inc.Another quick notes taking & saving & searching tool, with rich text su orted
posted by admin on June 9, 2011
How to build a static Qt version for Windows with
This guide contai the way, I took and which worked for me. I hope it can help you a little bit.
Preparation
First download the QtSDK you need, I took 4.7.0 and i tall it (incl. gcc). Then copy the complete qt file tree from Path-To-Qt-
\qt to Path-To-Qt-
\qt-static (or whatever path you prefer).
copy Path-To-Qt-
\bin\qtenv.bat to static folder and adapt content — replace xxx\qt with
\qt_static
Cleaning up the folders
As you copied the sources from an existing build, you have to clean it up, before doing a new build. To get this, do the following:
delete all tmp folders i ide Path-To-Qt-
\qt_static
go to Path-To-Qt-
\qt_static\lib\ and delete everything except the readme and the fonts folder
go to Path-To-Qt-
\qt_static\bin and delete all executables and dlls
search for all makefiles i ide Path-To-Qt-
\qt_static and delete them (Makefile, Makefile.debug, Makefile.release, not the others!)
Editing the config files for static build
Now you have to edit some configuration files, to enable static builds and also to like statically agai t the mingw c library:
edit the file Path-To-Qt-
\qt_static\mk ecs\win32-g++\qmake.conf and add the bold (with * ) marked stuff
_CFLAGS_RELEASE = -Os -momit-leaf-frame-pointer
_LFLAGS = -static -static-libgcc …
DEFINES += QT_STATIC_BUILD
edit Path-To-Qt-
\qt_static\qmake\Makefile.win32-g++
LFLAGS = -static -static-libgcc …
edit Path-To-Qt-
\qt_static\src\3rdparty\webkit\WebKit.pri
add CONFIG += staticlib on the top
Open a command shell and go to the following path: Path-To-Qt-
\qt_static
call configure with the needed optio . The one I took are:
configure.exe -static -debug-and-release -ope ource -confirm-lice e -platform win32-g++ -no-exceptio -dont-proce -no-qt3su ort -webkit -qt-sql-sqlite -qt-zlib -qt-li g -qt-libjpeg
the important ones are: * -static -platform win32-g++ -no-exceptio *
Now you have to build the makefiles (but only for the libraries, not for the tools):
bin\qmake.exe projects.pro QT_BUILD_PARTS=“li ” J***ASCRIPTCORE
_JIT=“yes”
Now you can build Qt:
mingw32-make.exe
go and have some coffee. On my machine, it took about 3 hours (Laptop with Intel Core2 Duo T7700 2,4 GHz, 2 GB RAM
, Windows 7 Profe ional, 32 Bit)
Other stuff
I do not recomend to build the tools (designer, a itant, etc.) as you have them in QtCreator so you don’t need them anymore. If you really want to execute them (like lrelease, lupdate), take the ones from the dynamic libraries folder (Path-To-Qt-
\qt\bin, incl. the needed dlls) :-)
Optimization
As the binaries might get really big, and you perha want to distribute them via the net, you should make them smaller. To achieve that, you can use tools like [upx.sourceforge.net] (
How to integrate static version of Qt additionally to QtCreator
Open QtCreator and go to the Tools / Optio menu. Select Qt4: Add a new version by pre ing the plus button enter a name and the path to qmake (Path-To-Qt-
\qt_static\bin\qmake.exe) add the MinGW directory (copy from 4.7.0)
If you create a new project, you are asked, which Qt version you want to use. Leave both checkboxes checked. If you already have a project and want to add this version, go to Projects (left hand of QtCreator) and add a setting.
For the static project configuration, you should add CONFIG
+=static in the command line.
Open the project settings, and pre details for the qmake step. In the additional arguments, add CONFIG
+=static
In the project (*.pro) file, add the following:
{ # everything below takes effect with CONFIG +=
static CONFIG +=
static CONFIG += staticlib #
is needed
you create a
library, not a
executable DEFINES += STATIC me age(
"~~~ static build ~~~"
information, that the
build is done mac: TARGET = $$join(TARGET,,,_static) #
adds an _static in the end, so you can seperate
build from non
build win32: TARGET = $$join(TARGET,,,s) #
adds an s in the end, so you can seperate
build from non
What also makes se e is to add a d to the binary, if you create a debug build:
# change the nama of the binary, if it is build in debug mode
CONFIG(debug, debug|release) { mac: TARGET = $$join(TARGET,,,_debug) win32: TARGET = $$join(TARGET,,,d)
Now you have it. Build the static version (select he static project settings and build it).
Last updated onJuly 29, 2011
posted by admin on July 28, 2011
Setting Up Development Environment for Symbian
When you i tall
, the build and run settings for Symbian devices are set up automatically. You only need to co ect the devices to the development PC.
Co ect the device to the development PC with an USB cable in PC Suite Mode. If you have not previously used the device with Ovi Suite or PC Suite, all the nece ary drivers are i talled automatically. This takes a roximately one minute.
To run Qt a licatio on Symbian devices, you must i tall the software that Qt a licatio require, typically Qt, Qt Mobility,
, and Open C. The
i tallation program creates shortcuts for i talling the required a licatio on Symbian devices. You can also use any of the standard methods for i talling a licatio .
The tool chain for building a licatio locally on the development PC for the
Symbian Device
target is only su orted on Windows. If you develop on Linux or Mac OS, you must use the Remote Compiler interface to a compilation service at Forum Nokia.
For more information about developing a licatio for the Symbian platform, select
Help Index
and look for
Platform Notes
, or see
Hardware and Software Requirements
For deploying and ru ing a licatio on the device, you need the following:
The Nokia USB drivers that come with
PC Suite
Ovi Suite
a lication for your device
i talled on the device
Qt Mobility APIs
i talled on the device, if you use them in a licatio i talled on the device, if you use web functionality in a licatio In addition, you can i tall example a licatio , demos, and utility a licatio , such as Nokia Energy Profiler and Nokia Performance Manager, on devices.
i tallation program creates shortcuts for i talling the a licatio on Symbian devices.
To run your a licatio in the Symbian emulator, you also need to i tall Carbide.c++ v2.0.0 or higher.
I talling Required A licatio on Devices
Separate i tallation packages are provided for Symbian^3 and Symbian^1 devices. To check the Symbian platform version of your device, see
You can also copy the .sis files from
\Symbian\sis
to the device using USB storage mode and i tall them from the file manager on the device.
Developing for Symbian^3
Start Qt SDK Symbian^3 I tall Qt 4.7.1 to Symbian^3 Device
. Follow the i tructio on the screen to i tall Qt libraries to the device.
Start Qt SDK Symbian^3 I tall QtMobility 1.1.0 to Symbian^3 Device
and follow the i tructio on the screen to i tall Qt mobility libraries to the device.
Start Qt SDK Symbian^3 I tall TRK (Debug Agent) to Symbian^3 Device
and follow the i tructio on the screen to i tall the TRK debugging a lication to the device.
Start Qt SDK Symbian^3 Qt 4.7.2 I tall
for for Qt 4.7.2 on Symbian^3 Device
and follow the i tructio on the screen to i tall
to the device.
Developing for Symbian^1
Symbian^1 incorporates Symbian OS and S60 5th Edition (S60 5.0), which is built on Symbian OS v9.4.
Start Qt SDK Symbian^1 I tall Qt 4.7.1 to Symbian^1 Device
. Follow the i tructio on the screen to i tall Qt libraries to the device.
Start Qt SDK Symbian^1 I tall QtMobility 1.1.0 to Symbian^1 Device
and follow the i tructio on the screen to i tall Qt mobility libraries to the device.
Start Qt SDK Symbian^1 I tall TRK (Debug Agent) to Symbian^1 Device
and follow the i tructio on the screen to i tall the TRK debugging a lication to the device.
Start Qt SDK Symbian^1 Qt 4.7.2 I tall
for for Qt 4.7.2 on Symbian^1 Device
and follow the i tructio on the screen to i tall
to the device.
In addition, you can i tall an example a lication and demos to Symbian^1 devices.
Adding Symbian Platform SDKs
contai all the tools you need for developing Qt a licatio for Symbian devices. To use Symbian APIs directly in your a licatio , you can i tall additional Symbian Platform SDKs:
Either the GCCE ARM Toolchain that is included in the Symbian SDKs, or RVCT 2.2 [build 686] or later (which is not available free of charge)(Your environment needs to find the compiler in the PATH).
Qt for Symbian 4.6.2 or later, i talled into the Symbian SDKs you want to use.
Setting Up Qt Creator
When you run Qt Creator after i talling the Symbian SDK and Qt for Symbian, the i talled SDKs and their corre onding Qt versio are automatically detected. For each detected Symbian SDK with Qt, a ecial entry is made in the Qt version management settings in
Optio ...
Qt Versio .
If you manually add a Qt version for Symbian, you must also manually ecify the Symbian SDK to use for this version.
If you want to run your a licatio in the Symbian emulator, you need to point Qt Creator to the Metrowerks Compiler that you want to use, by setting the
Carbide directory
of the Qt version to the corre onding Carbide.c++ i tallation directory.
You can check which Symbian SDKs and corre onding Qt versio are found in the
Optio ...
S60 SDKs
preference page.
[Previous:
] [Next:
Last updated onJuly 28, 2011
posted by admin on July 27, 2011
http://australianetwork.com/studyenglish/s2780523.htm
Last updated onJuly 27, 2011
posted by admin on July 27, 2011
Last updated onJuly 27, 2011
posted by admin on July 22, 2011
http://www.mkyong.com/jquery/how-to-stop-a-page-from-exit-or-unload-with-jquery/
When a page is exiting or unloading, the ‘unload‘ event will be activate, however, this event can not stop a page from exit.
$(window).bind('unload', function(){});
Since jQuery 1.4, you can bind the ‘beforeunload‘ event to $(windows) object to stop a page from exit , unload or navigating away.
$(window).bind('beforeunload', function(){
return '';
With ‘beforeunload‘ event attached, when you close the page, hits the back button or reload the page, a confirmation box will prompt to ask you whether you really want to go, choose ok to exit the page: cancel to stop the page from exit and stay on the same page.
In addition, you are allow to add your own me age i ide the confirmation box :
$(window).bind('beforeunload', function(){
return 'Before You Go< lt lt lt lt lt lt lt; \n Your custom me age go here';
P.S The ‘beforeunload’ event is su orted since jQuery 1.4
Try it yourself
titleRefresh a page in jQuery/title
< cript src=http://code.jquery.com/jquery-latest.j quot gt lt;/script
< ody
h1Stop a page from exit with jQuery/h1
< utton id=reloadRefresh a Page in jQuery/butto gt;
< cript type=text/javascript
$('#reload').click(function() {
location.reload();
$(window).bind('beforeunload', function(){
return 'Before You Go< lt lt lt lt lt lt lt; \n Your custom me age go here';
/script
Last updated onJuly 25, 2011
posted by admin on July 14, 2011
1. edit .pro file
CONFIG(debug, debug|release) {
DEFINES += _DEBUG
QMAKE_CXXFLAGS += -fprofile-arcs -ftest-coverage
QMAKE_LDFLAGS += -fprofile-arcs -ftest-coverage
LIBS += -lgcov
2. build &am run
3. gcov *.c -o debug a.log
4. gvim a.log
Last updated onJuly 14, 2011
posted by admin on July 13, 2011
Last updated onJuly 13, 2011
posted by admin on May 10, 2011
Last updated onJuly 13, 2011
posted by admin on July 12, 2011
《微软等数据结构+算法面试100题》自娱自解(完结)
1.把二元查找树转变成排序的双向链表
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
/ / / /
8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树 节点的数据结构如下:
struct BSTreeNode
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
中序遍历
2.设计包含min函数的栈。
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
栈上加链形堆
3.求子数组的最大和
题目:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10,-4, 7, 2,
因此输出为该子数组的和18。
动态规划,end[i]表示以i结尾的和最大子数组,end[i]=max{end[i-1]+a[i],a[i]}
4.在二元树中找出和为某一值的所有路径
题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
则打印出两条路径:10, 12和10, 5, 7。
二元树节点的数据结构定义为:
struct BinaryTreeNode // a node in the binary tree
int m_nValue; // value of node
BinaryTreeNode *m_pLeft; // left child of node
BinaryTreeNode *m_pRight; // right child of node
前序遍历树。每遇到一个新节点,把值与父节点的值加起来。到叶子时,加完后叶子上的值如果等于给出数,则认为存在一条可用路径。
5.查找最小的k个元素
题目:输入n个整数,输出其中最小的k个。
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。
建个大小为K的大根堆
第6题
腾讯面试题:
给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数
要求下排每个数都是先前上排那十个数在下排出现的次数。
上排的十个数如下:
【0,1,2,3,4,5,6,7,8,9】
举一个例子,
数值: 0,1,2,3,4,5,6,7,8,9
分配: 6,2,1,0,0,0,1,0,0,0
0在下排出现了6次,1在下排出现了2次,
2在下排出现了1次,3在下排出现了0次....
以此类推..
十个数n=10,下排表示数字个数,因此下排的和必定为10。而全为1的情况是不成立的,那么也就是说最少有一个大于1或者说至少有一个0存在。设下排0下的数字是x(x0),表示下排有x个0。
那么1~9中必定有x个0,下排1~9的数字和为10-x,而又有x个0存在,那么不是0的位置有9-x个。那么,把10-x个数放到9-x位置上,应该有1个2,8-x个1,而0对应的下排数x应该也对应其中一个1有:
2…x…
x 8-x 1…1…
如果8-x=2,则x=6恰好有:
0 1 2 3 4 5 6 7 8 9
6 2 1 0 0 0 1 0 0 0
一般地, gt;6的时候都可以用这种方法求得。小于6的情况还没想到通用的方法。。。
第7题
微软亚院之编程判断俩个链表是否相交
给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。
为了简化问题,我们假设俩个链表均不带环。
分别遍历两个链表,遍历到尾时,最后一个元素地址相同则相交。
问题扩展:
1.如果链表可能有环列?
两个链表任取一个链表头开始遍历,每遍历一个元素都与两个表头指针对比。如果能遍历到尾则不存在环,解答如上。如果碰到指针等于自己的表头,则放弃此链表遍历,开始遍历另一个链表。如果遇到另一个表头,则两链表相交。发生其他情况(两表都到自己表头,一表到尾一表回到自己表头,两表到不同的尾),则不相交。
2.如果需要求出俩个链表相交的第一个节点列?
如果不带环,则分别遍历两表,记录各自长度x、y,说明其中一表比另一表长x-y,让其先走x-y步。再两表同步前进至两指针相同,则为交点。
如果带环,分别遍历。如果一表遇到另一表头,记录长度x,开始遍历另一表,至自己表头记y,再让记录长度为x的表从头开始先走x-y步,再两表同步前进至两指针相同,则为交点。如果先遍历到自己则记y,开始遍历另一表,至同一位置记x,再让记录长度为x的表从头开始先走x-y步,再两表同步前进至两指针相同,则为交点。
第8题
此贴选一些 比较怪的题,,由于其中题目本身与算法关系不大,仅考考思维。特此并作一题。
1.有两个房间,一间房里有三盏灯,另一间房有控制着三盏灯的三个开关,
这两个房间是 分割开的,从一间里不能看到另一间的情况。
现在要求受训者分别进这两房间一次,然后判断出这三盏灯分别是由哪个开关控制的。
有什么办法呢?
开一盏灯,过十分钟再开一盏,此时进去,可辨别未开的灯对应未按的开关,用手摸摸,热的对应第一个开关
2.你让一些人为你工作了七天,你要用一根金条作为报酬。金条被分成七小块,每天给出一块。
如果你只能将金条切割两次,你怎样分给这些工人?
切成124。第一天给一块,第二天,用二换一,第三天给一,第四天用三换四,第五天给一,第六天用二换一,第七天给一。
!--[if !su ortLists]--3.
!--[endif]--★用一种算法来颠倒一个链接表的顺序。现在在不用递归式的情况下做一遍。
声明三个指针分别指向当前节点,下一节点,下下节点。不递归就用循环。
★用一种算法在一个循环的链接表里插入一个节点,但不得穿越链接表。
什么叫穿越链接表?用最普通的指针重定向不行么?
★用一种算法整理一个数组。你为什么选择这种方法?
要整理成什么样?排序的话,那就得看数组的状况,选择合适的排序算法。
★用一种算法使通用字符串相匹配。
只实现点和星?从头至尾匹配就行。遇到点就跳过该字符,遇到星就寻找星后面的字符,然后从星后面的字符重新开始匹配。
★颠倒一个字符串。优化速度。优化空间。
首尾交换并向中间推进,直到尾指针不大于首指针。时间O(n/2),空间为O(1)。
★颠倒一个句子中的词的顺序,比如将“我叫克丽丝”转换为“克丽丝叫我”,
实现速度最快,移动最少。
怎么样的移动最少,是打印出来,还是赋给原字符串?打印出来的话,字符串完全可以移动量为0。赋给原字符串,首地址能变不,不能变那移动量可能会达到n。首地址可变的话,把谓语和主语放在宾语后面,首地址指向宾语就可以。
★找到一个子字符串。优化速度。优化空间。
KMP算法。
★比较两个字符串,用O(n)时间和恒量空间。
每次取一个字符相比,直至取到的两个字符不同停止。
★假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗?
取第一个数,如果是6,把它与第6位交换,再看原来第6位(放手里)数字,如果是9,把原来第6位数字与第9位交换,再看原来第9位数字(放手里)……直到某位上已经放了某个数,而手里的数与之相同,则该数为所求。
★不用乘法或加法增加8倍。现在用同样的方法增加7倍。
左移三位即乘8,左移三位乘8再减去原数即是7倍
第9题
判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
如果是返回true,否则返回false。
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
因此返回true。
如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。
分治。从给定串最后一个数开始,如果它前面的数能分为连续的两段,一段比它大,一段比这,则以此数为根的树该层上后序存在。再分别对分成的前后两段分别重复上面的操作,如果所有点都可以如此分割,则认为该序列是一个后序遍历序列,否则不是。
第10题
翻转句子中单词的顺序。
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student.a am I”。
开辟一块新空间,原字符串从后往前遍历,遇到空格就往新空间里写,直至原符串遍历完毕。
第11题
求二叉树中节点的最大距离...
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,
我们姑且定义距离为两节点之间边的个数。
写一个程序,
求一棵二叉树中相距最远的两个节点之间的距离。
动态规划
maxlength(i)=max{ maxlength (i-left), maxlength(i-right),high(i-left)+high(i-right)+1}
第12题
题目:求1+2+…+n,
要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
这题还没有想到好的解法,不知道原题是想用什么语言。C++、J***A可以用模板来实现。至于C,只想到嵌汇编来做。
第13题:
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
链表结点定义如下:
struct ListNode
int m_nKey;
ListNode* m_pNext;
某个指针先走K-1步,再加一个指针从头开始,两个指针同步进行,当前一个指针到尾,后一指针指向倒数第K个节点。
第14题:
题目:输入一个已经按升序排序过的数组和一个数字,
在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
两头夹啊,两头分别设一个指针,两数相加,大于15则,右边指针的下标减一,小于15则左边指针的下标加一,直至两数相加为15。
第15题:
题目:输入一颗二元查找树,将该树转换为它的镜像,
即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
用递归和循环两种方法完成树的镜像转换。
例如输入:
5 7 9 11
输出:
11 9 7 5
定义二元查找树的结点为:
struct BSTreeNode // a node in the binary search tree (BST)
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
递归时先求递归调用子问题,再换左右指针,即类似后序遍历。用循环时好像用层次遍历和后序遍历都可以。
第16题:
题目(微软):
输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入
/ / / /
5 7 9 11
输出8 6 10 5 7 9 11。
树的层次遍历,或叫图的广度遍历,定义一个队列即可。
第17题:
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
分析:这道题是2006年google的一道笔试题。
定义一个128长的数组(每个字符按ASCII码对应相应的数组元素),初值为0。遍历字符串,把数组相应的位置上的数加1,第二次遍历字符串时,读数组上的数,为1的则为所求。实际上就是用数组做了个哈希表。
第18题:
题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,
每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。
当一个数字删除后,从被删除数字的下一个继续删除第m个数字。
求出在这个圆圈中剩下的最后一个数字。
July:我想,这个题目,不少人已经 见识过了。
约瑟夫问题,模拟实现,记得求余就可以。听说还有O(n)算法,
第19题:
题目:定义Fibonacci数列如下:
/ 0 n=0
f(n)= 1 n=1
/ f(n-1)+f(n-2) n=2
输入n,用最快的方法求该数列的第n项。
分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci作为例子。
因此很多程序员对这道题的递归解法非常熟悉,但....呵呵,你知道的。。
循环吧,从第1项开始计算,一直到n。还有一种更省事的方法,求出通项。
如果没记错通项应该是f(n)= (((sqrt(5)+1)/2)^n-((sqrt(5)-1)/2)^n) /sqrt(5)
第20题:
题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。
例如输入字符串345,则输出整数345。
字符串一个个取。每次取之前把现有的数(初值为0)乘10再加上每个字符减48即为现有的新数。同时注意正负号。
第21题
2010年中兴面试题
编程求解:
输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,
使其和等于 m ,要求将其中所有的可能组合列出来.
这是一个01背包问题。同时加入一个二维辅助数组,记录每次选择的情况。K!轻描淡写几句话,这题挺累人的,特别是求所有组合,得分析那个辅助数组。
第22题:
有4张红色的牌和4张蓝色的牌,主持人先拿任意两张,再分别在A、B、C三人额头上贴任意两张牌,
A、B、C三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌,
A说不知道,B说不知道,C说不知道,然后A说知道了。
请教如何推理,A是怎么知道的。
如果用程序,又怎么实现呢?
红计0,蓝计1。首轮三个人都没猜出来,那么每个人就不可能看到四个0或四个1。
对首轮最后一个人C来说,他应该看出来三个人至少有一个人头上出现01,否则必定有人首轮能猜出,而C最终没猜出,所以01必定出现在AB至少一个头上。A如果看到B是00或11,则必能猜到自己是01,这是一种可能,不是充分条件。还有其他可能吗?
觉得出题人没表述清楚,题中说“然后A知道”,那么BC是否知道呢?BC如果知道是否是因为A知道了他们才知道的呢?这都会影响后续的结果。如果我答题,就蒙A一红一蓝。
编程实现,穷举可能可以实现吧。
第23题:
用最简单,最快速的方法计算出下面这个圆形是否和正方形相交。
3D坐标系 原点(0.0,0.0,0.0)
圆形:
半径r = 3.0
圆心o = (*.*, 0.0, *.*)
正方形:
4个角坐标;
1:(*.*, 0.0, *.*)
2:(*.*, 0.0, *.*)
3:(*.*, 0.0, *.*)
4:(*.*, 0.0, *.*)
圆的方程可以写出,如果正方形的四个点代入圆的方程都大于0或是都小于则认为不相交,其余情况认为二者相交。
第24题:
链表操作,
(1).单链表就地逆置,
声明三个指针分别指向当前节点,下一节点,下下节点,从头到尾换指针就可以。
(2)合并链表
想怎么合并?如果是排好序的两个链表合成一个排好序的。分别比较两个链表当前取到的值即可,谁小把指针指向谁,被指的链表,指针向前推继续比,直到一个表遍历到尾,再把它的尾指针直接指向未遍历到尾的表的剩余部分。
第25题:
写一个函数,它的原形是int continumax(char*outputstr,char *intputstr)
功能:
在字符串中找出连续最长的数字串,并把这个串的长度返回,
并把这个最长数字串付给其中一个函数参数outputstr所指内存。
例如:abcd12345ed125 123456789的首地址传给intputstr后,函数将返回9,
outputstr所指的值为123456789
遍历呗,遇到非数字无视,每次遇到新数字开始计数,而定义某一指针永远指向长度最大的数字开始位置。
26.左旋转字符串
题目:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。
要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
每个字符的位置是可以计算的,必定是当前位置(0起始)+总长度-2,算出来不小于总长度,则再减去一个总长度即可。
27.跳台阶问题
题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。
求总共有多少总跳法,并分析算法的时间复杂度。
这道题最近经常出现,包括MicroStrategy等比较重视算法的公司
都曾先后选用过个这道题作为面试题或者笔试题。
动态规划,f(n)=f(n-1)+f(n-2)、f(1)=1、f(0)=1。
28.整数的二进制表示中1的个数
题目:输入一个整数,求该整数的二进制表达中有多少个1。
例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
分析:
这是一道很基本的考查位运算的面试题。
包括微软在内的很多公司都曾采用过这道题。
和1做与操作,如果结果为1计数加1,再右移,直到数字等于0。
29.栈的push、pop序列
题目:输入两个整数序列。其中一个序列表示栈的push顺序,
判断另一个序列有没有可能是对应的pop顺序。
为了简单起见,我们假设push序列的任意两个整数都是不相等的。
比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。
因为可以有如下的push和pop序列:
push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,
这样得到的pop序列就是4、5、3、2、1。
但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。
模拟实现即可
30.在从1到n的正数中1出现的次数
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。
分析:这是一道广为流传的google面试题。
有点难度,不过可以穷举。当然还是应该按不同位数求出分段函数表达式来,再找规律。
31.华为面试题:
一类似于蜂窝的结构的图,进行搜索最短路径(要求5分钟)
怎么个蜂窝法?无图无真相。可能用迪杰斯特拉算法或是拓扑排序就行。
有两个序列a,b,大小都为n,序列元素的值任意整数,无序;
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
例如:
var a=[100,99,98,1,2, 3];
var b=[1, 2, 3, 4,5,40];
二维背包问题。把所有数加起来再求一半。实际上就是求最接近和一半的序列,这个序列长度还得是n。就是说包的容量为n,可承重量为和的一半,每个物品的价值等于其重量,求价值最大的方案。
实现一个挺高级的字符匹配算法:
给一串很长字符串,要求找到符合要求的字符串,例如目的串:123
1******3***2 ,12*****3这些都要找出来
其实就是类似一些和谐系统。。。。。
通配符问题?参考第8题。
实现一个队列。
队列的应用场景为:
一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列
PV原语问题?关键是控制线程同步。一次只能入列一个数,入列的同时不能出列,出列同时不入列,出列也只能一次一个。
求一个矩阵m*n中最大的二维矩阵 (元素和最大).如:
1 2 0 3 4
2 3 4 5 1
1 1 5 3 0
中最大的是:
要求:(1)写出算法;(2)分析时间复杂度;(3)用C写出关键代码
遍历一遍,先只计算每个元素和其下面的元素的和,再遍历一遍,把每个元素计算的值与后一个元素计算的值相加,同时取最大值即为所求。时间应该为n*(m-1)+(n-1)(m-1),也就是O(mn)。
第36题-40题(有些题目搜集于CSDN上的网友,已标明):
36.引用自网友:longzuo
谷歌笔试:
n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系,
存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j的队伍中更强的一支。
所以w[i][j]=i 或者j,现在给出它们的出场顺序,并存储在数组order[n]中,
比如order[n] = {4,3,5,8,1......},那么第一轮比赛就是 4对3, 5对8。.......
胜者晋级,败者淘汰,同一轮淘汰的所有队伍排名不再细分,即可以随便排,
下一轮由上一轮的胜者按照顺序,再依次两两比,比如可能是4对5,直至出现第一名
编程实现,给出二维数组w,一维数组order 和 用于输出比赛名次的数组result[n],
求出result。
编程模拟即可
有n个长为m+1的字符串,
如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接,
问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。
先把各个字符串看成节点,前后可匹配的就首尾相联,形成DAG图,再求用拓扑序列求最长路径,没有完整的拓扑序列就报错出现循环。
百度面试:
1.用天平(只能比较,不能称重)从一堆小球中找出其中唯一一个较轻的,使用x次天平,
最多可以从y个小球中找出较轻的那个,求y与x的关系式。
用一次天平可称出三个小球,用两次天平可称三个三即九个,用次可称三个九,y=3^x
2.有一个很大很大的输入流,大到没有存储器可以将其存储下来,
而且只输入一次,如何从这个输入流中随机取得m个记录。
应该知道输入流的大小吧,然后分m次输入,每次随机生成一个小于m的整数,取该次输入中相应的数据。
3.大量的URL字符串,如何从中去除重复的,优化时间空间复杂度
遍历一遍,用散列表记录数量,对应的散列表位置为空则记下该串,并该串散列表位置上自增。
网易有道笔试:
求一个二叉树中任意两个节点间的最大距离,
两个节点的距离的定义是 这两个节点间边的个数,
比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。
参见第11题
求一个有向连通图的割点,割点的定义是,如果除去此节点和与其相关的边,
有向图不再连通,描述算法。
图的割点问题,深度优先遍历,如果某点的所有子孙节点与其祖先节点之间没有相连的边。
40.百度研发笔试题
引用自:zp155334877
1)设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)。
参见第2题
2)一串首尾相连的珠子(m个),有N种颜色(N=10),
设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。
并分析时间复杂度与空间复杂度。
模拟实现即可。
先不考虑环,只考虑线性的情况。
申请一数组记录当前所包含的颜色的数量。两个指针,i指向起点,j移动。当当前颜色数为N时,即形成一种方案,记录当前长度,j停止移动,而移动i,相应去除i指向的颜色数量减一。减后数量不为0就一直向前移,直到碰到一个减完后为0,则说明此时颜色已不全了。此时继续移动j,直到下一次颜色数为N,如此反复,移动j后每次颜色数为N时,记录当前方案长度,保留最小长度即为所求。
如果带环呢?环不环的只是多一个求余问题。(已编码验证)
3)设计一个系统处理词语搭配问题,比如说中国 和人民可以搭配,
则中国人民 人民中国都有效。要求:
*系统每秒的查询数量可能上千次;
*词语的数量级为10W;
*每个词至多可以与1W个词搭配
当用户输入中国人民的时候,要求返回与这个搭配词组相关的信息。
感觉问题与前面举的例子挨不上。什么叫搭配词组相关的信息?中国、人民、人民中国、中华人民共和国……都可以算吗?凭一些猜想试着写几句。
词库肯定得排序或建索引,方便查找。搭配信息也应该有相应的数据结构,比如用图来存储,无论是邻接表还是邻接阵保证有序。
再对给定词语先做分词,把词语分出来,怎么分呢?假设词语最少两个字,当然是每两个字地截取输入串,到词库里去查。如果查出是某字的前缀,就再读下面的字进一步查词,直至匹配到,或查得完全不是个词。对截串原则上使用贪心,一方面按最长匹配,另一方面匹配上了,直接取后两个字进行匹配,未匹配上就从第二个字开始再取一个认为是一个词到词库里去查。由此题题意,应该不考虑未匹配上的词,也就是说用贪心必定能匹配上。如果只考虑问题“中国人民”,则可分成两个词中国、人民。
分好了词,对分出的词排序,再读匹配信息,也就是取得了一个由若干节点构成的一张有向图。在中国的节点上能找到人民的话,则说明二者可匹配,说明可以进行词语组合,即得到中国人民和人民中国。
对同时输入更多的词,分词工作并不是很难,关键是匹配怎么输出?如果只两两匹配,就两两组合输出,如果是多词匹配就得考虑组合的种类了(不考虑)。
另外分析一下性能:
词应该两个字的据多,四个字节,假设平均5个字节,10W个词不超过0.5M。搭配信息用图来存,10W个词每个词至多可以与1W个词搭配,邻接表按每位存一个搭配不超过120M,用字节存则要1G左右。因此空间上是可以接受的。如果用邻接阵存则是不到邻接表5倍(本来是10倍,但可以用上三角阵存储,取半)。
时间上分词主要用排好序了的二分查找或用索引,很方便。分出n个词排好序后,进行匹配信息的查询,只需n^2/2次图查找,用邻接阵可一次定位,用邻接表每次查找也可以用二分查找。
一次应用大概是nlog10W+nlogn+n^2/2*log1W(邻接表则不乘最后的log1W)。代入一些数值计算后,一般的PC机,1秒钟可以不低于一千次应用,时间上应该可以达标。
41.求固晶机的晶元查找程序
晶元盘由数目不详的大小一样的晶元组成,晶元并不一定全布满晶元盘,
照相机每次这能匹配一个晶元,如匹配过,则拾取该晶元,
若匹配不过,照相机则按测好的晶元间距移到下一个位置。
求遍历晶元盘的算法 求思路。
没太看明白
42.请修改a end函数,利用这个函数实现:
两个非降序链表的并集,1-2-3 和 2-3-5 并为 1-2-3-5
另外只能输出结果,不能修改两个链表的数据。
参见24题
43.递归和非递归俩种方法实现二叉树的前序遍历。
递归时先输出再调左右的子问题。非递归就用循环加栈,初始根节点进栈,然后每次从栈中取一个指针,再把它的右节点左节点先后进栈。
44.腾讯面试题:
1.设计一个魔方(六面)的程序。
应该不是让求魔方的解法,求魔方解法也是有公式的,不同的情况按分支套公式就行。
依题意可能是让实现一个模拟魔方的程序。不讨论UI,只讨论魔方算法的实现。
六个3*3矩阵,各矩阵初值内部相同两两间互不相同,对应每个面。
魔方转动只有为两种:正对该面时顺时针转动或逆时针转动。
先声明各面排列,比如1对3、2对4、5对6。因为魔方的主要操作是对某面转动,所以为了尽量的快应该直接使用分支判断。写六个分支对应六个面,每面再写两个分支(顺时针转、逆时针转)。每种转动,自己和相邻面的矩阵数据如何交换。只对矩阵进行更新,再把更新后的矩阵返回到UI,即实现了魔方的转换。
2.有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。
请用5分钟时间,找出重复出现最多的前10条。
遍历同时用哈希表计数,每更新一次哈希表计数,试着更新大小为10的小根堆,求数量最大的10条。
3.收藏了1万条url,现在给你一条url,如何找出相似的url。(面试官不解释何为相似)
什么叫相似?是指属于同一服务,还是指URL字串上大都相同呢?
先考虑前者,如果一个URL是另一个URL的前缀,是不是应该叫相似?或者两个URL的前面的目录相同,是不是也应该叫相似?所以可以先左对齐求前段地址和部分目录的字符串是否一致,如果一致则认为相似。
再考虑后者,如果不满足前面的结果。考虑相似是指匹配字符较多。那就用动态规划求字符对齐匹配数最大的。那么较多是多少呢?这个标准可以人为取,我想怎么也得80%以上才叫相似吧。那就人为规定了字符动态匹配数的标准了,达标的就认为是相似的。
45.雅虎:
1.对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)
某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
这是一个最大流问题,把矩阵看成黑白相间的点阵,题目等价于,每次对相邻黑白两点数量加1。
先判断黑白点上各自的数据和是否相等,如果二者数据不等,就没必要往下进行了,必定无解。
如果相等,再转化最大流来解。假设存在一个源点指向所有的黑点每条边的容量为黑点上的数据,又有一个汇点,所有白点都联向它,其边上的容量也为无穷大。所有黑点指向与其相邻的白点,其容量为白点上的数据。求从源到汇的最大流,如果最后源的所有边都饱和,即最大流等于黑点上数据之和则说明该矩阵有解。
2.一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1;
{3,6}{2,4,3} m=2
{3,3}{2,4}{6} m=3 所以m的最大值为3
m的值不可能超过sum(a)/max(ai)。从sum(a)/max(ai)到1开始试,同时m得是sum(a)的因子。
再转成01背包问题。包容量为sum(a)/m,每个物品价值等于其体积,求包可装最大价值的方案。
特别地,如果sum(a)是素数,而数组内存在不等的两个数,则m只能为1。
46.搜狐:
四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())
()()()()
(()())()
()(()()) (())()()
()(())()
()()(())
(())(())
((()))()
()((()))
(((()))) (()()())
((())())
(()(())) ((()()))
卡特兰数
47.创新工场:
求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}
经典的动态规划问题。f(i)=max{f(j)}+1 (当ji且a[i]a[j])。如果使用二分查找,理论上会更快。
48.微软:
一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}
是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。
二分查找吧。虽然左移了若干位,不影响用二分查找。只是判断向前还是向后查找时注意一下该段起中尾三个数的大小关系。
49.一道看上去很吓人的算法面试题:
如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
这题八成是蒙人的,数学上都证明了用比较排序是不可能达到O(n)的。这题让达到这个时间,必定是要讨论数组的状况,比如范围不大可以使用计数排序,再如只有整数可以使用基数排序,等等一些特殊情况才能在线性时间内完成排序。
50.网易有道笔试:
1.求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是 这两个节点间边的个数,
比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。
参见39题。
2.求一个有向连通图的割点,割点的定义是,
如果除去此节点和与其相关的边,有向图不再连通,描述算法。
参见39题。
-------------------------------------------------------------------
51.和为n连续正数序列。
题目:输入一个正数n,输出所有和为n连续正数序列。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。
分析:这是网易的一道面试题。
等差数列n=(2*a1*x+(x-1)x)/2,a1为首项,x为长度,x从1开始自增到n反求a1,如果求出a1为正整数则是一个可行序列,输出。时间应该是O(n)。
52.二元树的深度。
题目:输入一棵二元树的根结点,求该树的深度。
从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
例如:输入二元树:
输出该树的深度3。
二元树的结点定义如下:
struct SBinaryTreeNode // a node of the binary tree
m_nValue; // value of node
SBinaryTreeNode
*m_pLeft;
// leftchild of node
SBinaryTreeNode
*m_pRight; // right childof node
分析:这道题本质上还是考查二元树的遍历。
动态规划,High(i)=max{high(i-left),high(i-right)}+1,本质上是后序遍历。
53.字符串的排列。
题目:输入一个字符串,打印出该字符串中字符的所有排列。
例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串
abc、acb、bac、bca、cab和cba。
分析:这是一道很好的考查对递归理解的编程题,
因此在过去一年中频繁出现在各大公司的面试、笔试题中。
经典的排列输出。得考虑一种情况,如果字符串内有重复字符怎么办,所以不能用全排列的算法,得用不重复排列算法。
54.调整数组顺序使奇数位于偶数前面。
题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,
所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
两头扫,左边碰到偶数就停,再扫右边,右边碰到奇数就跟左边的偶数换,再继续扫左边,直至两边相碰。类似快速排序的一种实现方式。
题目:类CMyString的声明如下:
cla CMyString
public:
CMyString(char* pData = NULL);
CMyString(co t CMyString&am str);
~CMyString(void);
CMyString&am operator = (co t CMyString&am tr);
private:
char* m_pData;
请实现其赋值运算符的重载函数,要求异常安全,即当对一个对象进行赋值时发生异常,对象的状态不能改变。
C++不太懂。
56.最长公共字串。
题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,
则字符串一称之为字符串二的子串。
注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。
请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。
例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子串,
则输出它们的长度4,并打印任意一个子串。
分析:求最长公共子串(Longest Common Su equence, LCS)是一道非常经典的动态规划题,
因此一些重视算法的公司像MicroStrategy都把它当作面试题。
经典动态规划
a[i]=b[i]时,f(i,j)=f(i-1,j-1)+1.
a[i]!=b[i]时,f(i,j)=max{f(i-1,j), f(i,j-1)}
57.用俩个栈实现队列。
题目:某队列的声明如下:
templatetypename T cla CQueue
public:
CQueue() {}
~CQueue() {}
void a endTail(co t T&am ode);
// a end a element to tail
voiddeleteHead();
// remove a element from head
private:
T m_stack1;
T m_stack2;
分析:从上面的类的声明中,我们发现在队列中有两个栈。
因此这道题实质上是要求我们用两个栈来实现一个队列。
相信大家对栈和队列的基本性质都非常了解了:栈是一种后入先出的数据容器,
因此对队列进行的插入和删除操作都是在栈顶上进行;队列是一种先入先出的数据容器,
我们总是把新元素插入到队列的尾部,而从队列的头部删除元素。
AB两个栈,存数时先把B栈的数出栈依次放到A中,取数时先把A栈的数出栈依次放到B中。
58.从尾到头输出链表。
题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:
struct ListNode
m_nKey;
ListNode* m_pNext;
分析:这是一道很有意思的面试题。
该题以及它的变体经常出现在各大公司的面试、笔试题中。
用栈输出。也可以用递归,先调子问题再输出本节点。
59.不能被继承的类。
题目:用C++设计一个不能被继承的类。
分析:这是Adobe公司2007年校园招聘的最新笔试题。
这道题除了考察应聘者的C++基本功底外,还能考察反应能力,是一道很好的题目。
final?C++不太懂。
60.在O(1)时间内删除链表结点。
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:
struct ListNode
m_nKey;
ListNode*
m_pNext;
函数的声明如下:
void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted);
分析:这是一道广为流传的Google面试题,能有效考察我们的编程基本功,还能考察我们的反应速度,
更重要的是,还能考察我们对时间复杂度的理解。
把下一节点的值拷到本节点,再删下一节点。
-------------------------------------------------------------------------
61.找出数组中两个只出现一次的数字
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。
请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
分析:这是一道很新颖的关于位运算的面试题。
先求异或得出一个结果是这两个数字的异或,必不为0。其二进制至少有一位为1,以这位为准把原数组分为两部分,一部分该位为1数,一部分该位为0数。这两个数必分别在这两个小数组里,且每个小数组除此数之外其他数出现两次,再用异或就可以分别求得。
62.找出链表的第一个公共结点。
题目:两个单向链表,找出它们的第一个公共结点。
链表的结点定义为:
struct ListNode
m_nKey;
ListNode*
m_pNext;
分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目,
因此在微软的面试题中,链表出现的概率相当高。
见第7题
63.在字符串中删除特定的字符。
题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
例如,输入”They are students.”和”aeiou”,
则删除之后的第一个字符串变成”Thy r stdnts.”。
分析:这是一道微软面试题。在微软的常见面试题中,与字符串相关的题目占了很大的一部分,
因为写程序操作字符串能很好的反映我们的编程基本功。
从头到尾扫,每个字符都与第二个串中的所有字符比较,相同就略去。O(mn)
64. 寻找丑数。
题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,
但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。
求按从小到大的顺序的第1500个丑数。
分析:这是一道在网络上广为流传的面试题,据说google曾经采用过这道题。
每一丑数必定是其前面某个数直接乘2、3、5所得。从第一个开始算到第1500个就行。每次算一个,把该次要计算的数之前所有丑数乘以2、3、5,算出来之后的所有结果与此前最后一个丑数比较,大于最后一个丑数且最小即为要取的丑数。为了确保不溢出有必要使用64位计算。取几个数最小值的时候用堆应该可以更快一些,那就得建个小根堆。算出来是859963392。(已编码验证)
65.输出1到最大的N位数
题目:输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,
则输出1、2、3一直到最大的3位数即999。
分析:这是一道很有意思的题目。看起来很简单,其实里面却有不少的玄机。
有啥玄机?从1输出到10^n-1不就成了,注意别溢出就成了。
66.颠倒栈。
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。
颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。
F(i,bool)//bool==1表示出栈,0表示进栈
if(bool==1){
F(i-1,1);
i出栈;
F(i-1,0);
i进栈;
Main(){F(5,1);F(5,0);}
67.俩个闲玩娱乐。
1.扑克牌的顺子
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。
2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。
遍历一遍,看有几张王,且除王外最大最小值。
无王时,最大最小差为4,
一王时,最大最小差为3,
俩王时,最大最小差为2
2.n个骰子的点数。
把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,
打印出S的所有可能的值出现的概率。
一个骰子六面。最小全是一,S=n;最大全是六,S=6n。那么S的取值应该是n至6n的所有整数。
对首尾的概率好计算,都是(1/6)^n,其他取值不容易求解。
分析一下,对某一S,其所有可能的情形,就是n个数,每个数取值在1~6之间,把这些数拼成S。问题类似多重背包问题,包大小为S,物品大小为1,价值为1,n个物品,每个物品个只有6个,求价值最大的方案总数。不同的是对所有方案必须每件物品至少装一件,那么这个多重背包就改成:包大小为S-6,物品大小为1,价值为1,n个物品,每个物品个只有5个,求价值最大的方案总数。
同时注意到n+1与6n-1的概率应该是一样的,n+2与6n-2也一样……因此,计算量可以减少一半。
因此, S从n+1遍历到7n/2,对每个S解上面的多重背包问题,对某S求得的方案数除以6^n即为其概率。
不太困难,只是复杂度高点。
68.把数组排成最小的数。
题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。
例如输入数组{32,
321},则输出这两个能排成的最小数字32132。
请给出解决问题的算法,并证明该算法。
分析:这是09年6月份百度的一道面试题,
从这道题我们可以看出百度对应聘者在算法方面有很高的要求。
这题有点意思,应该是道经典题,以前见过类似的,不过当时只认识了题目关键所在,没有思考解决方案。一般可以先按字符串大小排序,贪心输出。但关键在于,如果一个数(32)是另一数(321)的前缀(32),且后缀(1)比前缀(32)小。简单地按贪心输出来的数可能不是最小的。对此问题可以如下解决:
如果1号数(排好序了)是2号数的前缀,且2号数的后缀比前缀小(比前缀大则直接把1号数输出了),则向下扫描。如果2号数是3号数前缀,且3号数的后缀比前缀小,继续,直到i号数不是i+1号数的前缀或i+1号数前缀比后缀小。输出i号数(就认为删了)。再看i+1号数是否是i-1的前缀且i+1号数的后缀比前缀小,如果是则重复上面的过程,如果不是则输出i-1号数(就认为删了)。如此依次执行就可以实现。
测试数据:35 351 3512 35124 3522 3523
69.旋转数组中的最小元素。
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,
输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。
分析:这道题最直观的解法并不难。从头到尾遍历数组一次,就能找出最小的元素,
时间复杂度显然是O(N)。但这个思路没有利用输入数组的特性,我们应该能找到更好的解法。
二分查找。先取首尾两数比较,如果首小于尾,则第一个数即为所求。如果首大于尾,二分查找得到一个新数,把原数组分为两段。总取首大于尾的那段(取后段首指针加1、取前段为尾指针减1),新指针对比,如果首小于尾或者首尾指针重叠,首指针所指为所求,否则重复二分查找迭代。
70.给出一个函数来输出一个字符串的所有排列。
ANSWER 简单的回溯就可以实现了。当然排列的产生也有很多种算法,去看看组合数学,
还有逆序生成排列和一些不需要递归生成排列的方法。
印象中Knuth的TAOCP第一卷里面深入讲了排列的生成。这些算法的理解需要一定的数学功底,
也需要一定的灵感,有兴趣最好看看。
参照第53题
71.数值的整数次方。
题目:实现函数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)
result *=base;
return result;
上面给出的算法不是我给的,可以算出结果,这种做法效率不是很好,让人一看就是不是正规军出身。体现水平的解法应该是用循环或递归实现:x^y={(x^(y/2))^2 、y为偶数时|x*(x^(y/2))^2 、y为奇数时}
题目:设计一个类,我们只能生成该类的一个实例。
分析:只能生成一个实例的类是实现了Singleton模式的类型。
C++不太懂,是不是得定义静态变量然后在构造函数里动点手脚?
73.对策字符串的最大长度。
题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。
比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
分析:可能很多人都写过判断一个字符串是不是对称的函数,这个题目可以看成是该函数的加强版。
扫描啊,如果碰到连续两个一样的字母,就另外左右开弓的扫,求出对称的长度同时更新最大值。再继续向前扫,直至字符串扫完。
74.数组中超过出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
分析:这是一道广为流传的面试题,包括百度、微软和Google在内的多家公司都
曾经采用过这个题目。要几十分钟的时间里很好地解答这道题,
除了较好的编程能力之外,还需要较快的反应和较强的逻辑思维能力。
从头扫,前后两个指针,初始时只动后指针向后移,如果两个指针指向不同的数字,则两个数字都删除,遇到相同的数字,后指针向后移。扫完后剩下的数必定一样且是所求的数。
75.二叉树两个结点的最低共同父结点
题目:二叉树的结点定义如下:
struct TreeNode
int m_nvalue;
TreeNode* m_pLeft;
TreeNode* m_pRight;
输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。
分析:求数中两个结点的最低共同结点是面试中经常出现