首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

也搞一个逻辑有关问题,大家看看哪位高手能很快回答上来

2012-01-15 
也搞一个逻辑问题,大家看看谁能很快回答上来这是我进一个公司时的面试题,当初没打上来(答了,但回答错了),

也搞一个逻辑问题,大家看看谁能很快回答上来
这是我进一个公司时的面试题,当初没打上来(答了,但回答错了),可能由于紧张过度?废话少说,大家看题,看谁可以很快回答出来。
一个100层的高楼,已知从某一层楼开始往下抛一枚棋子,棋子会摔碎。现在给你两枚这样的棋子,不考虑爬楼,下楼拣棋子等过程,用一个好的方案,快速的把恰好能摔碎棋子的楼层找到(答案应该好猜,推理过程就显得比较重要了)。

[解决办法]
50楼开始扔,摔不碎75楼开始摔,摔不碎83楼开始摔......
[解决办法]
这不就和判断一个数字在不在一组数字中一样嘛。
[解决办法]
偶觉得应该二楼开始摔,摔不烂,就上四楼摔,再不烂就六楼。。。每次爬二层。

一直到摔烂为止,如果摔烂了,就退回下一层再摔一次。

如果下一层能摔烂,就是这层,不然就是刚才那层。。
[解决办法]
yuanarea(我就是个送外卖的~~~) ( ) 信誉:100 2007-07-25 08:29:45 得分: 0


50楼开始扔,摔不碎75楼开始摔,摔不碎83楼开始摔......


同意
[解决办法]
yuanarea(我就是个送外卖的~~~) ( ) 信誉:100 2007-07-25 08:29:45 得分: 0


50楼开始扔,摔不碎75楼开始摔,摔不碎83楼开始摔......


同意

偶觉得你们方法不行。要50楼扔烂了,那就下25,25再扔烂了。。
下13再扔。。。可二个棋子都烂了,你拿什么扔。。
[解决办法]
wweennbb() ( ) 信誉:100 2007-07-25 10:55:35 得分: 0


偶觉得应该二楼开始摔,摔不烂,就上四楼摔,再不烂就六楼。。。每次爬二层。

一直到摔烂为止,如果摔烂了,就退回下一层再摔一次。

如果下一层能摔烂,就是这层,不然就是刚才那层。。

---------------------
我觉得正确
[解决办法]
wweennbb() ( ) 信誉:100 2007-07-25 10:55:35 得分: 0


偶觉得应该二楼开始摔,摔不烂,就上四楼摔,再不烂就六楼。。。每次爬二层。

一直到摔烂为止,如果摔烂了,就退回下一层再摔一次。

如果下一层能摔烂,就是这层,不然就是刚才那层。。
--------------------------------------------

[解决办法]
2楼开始
不碎 4楼
不碎 8楼
不碎 16楼……

32楼碎了 17楼——〉18楼——〉……——〉31楼
32楼不碎 34——〉40——〉44——〉52——〉64
64楼碎了 53——〉54——〉……——〉63

64楼不碎——〉66——〉70——〉78——〉86——〉100
依此类推

碎的楼层越高,这个算法越有利
[解决办法]
思路是对的,可惜楼层弄错了

应该从3楼而不是2楼开始摔~
[解决办法]
每次只能增加两层,否则不可能用剩下的一个确认精确的楼层~
[解决办法]
哦,一下没想清楚,房子是没有0层的
[解决办法]
用一个判断碎的所在区域,剩下一个只能一层一层试,每次只能增加1层
[解决办法]
只有两枚棋子,拜托都看清题再说~
[解决办法]

50楼开始扔,摔不碎75楼开始摔,摔不碎83楼开始摔. 这个最坏情况是O(N)/2
比较同意这个

[解决办法]
总结一下:
二种扔法:
第一种:
从三楼开始扔,不烂,就上六楼扔,再不烂,就再上九楼。。。每次上三层。
一直到摔烂为止,如果扔烂了,就退回下二层再扔一次。就可以知道哪层扔得烂.
第二种:
从五十楼开始,不烂,就上75,再不烂。。。就再折半。。。
如果烂了,就退回上次扔的地方上一层开始一层一层扔。
如果五十楼扔烂,就从二楼开始往五十扔,每次上一层。

第二种对高层扔烂比较好,不过总体来说,还是第一种实用。
不知道大家觉得如何?
[解决办法]
这个题去年程序员杂志上说过,好像是求 1+2+3+....+n> 100的最小整数n, 算出来的结果n,最为第一次的楼层,如果没碎,就将n-1最为第二次的”楼层增量“,如果碎了,就从0..n逐层试,以此类推,可以将次数 控制在n次之内
[解决办法]
顶ls的,我也看到过
[解决办法]
楼层间隔不能超过1层,够则你摔碎了,你只剩下一枚棋子,怎么判断剩下N层(N> 1)?


比如44楼没碎,48楼碎了,中间3层楼你怎么用一枚棋子判断?
[解决办法]
不考虑拣棋子么,不都说了这个前提条件了
[解决办法]
TO viena() 维也纳() ( ) 信誉:100 2007-7-25 12:22:04 得分: 0

思路是对的,可惜楼层弄错了
应该从3楼而不是2楼开始摔~
==================================
这个你反而思维定式了,
还是应该从2楼开始,万一在1楼平地掉下去就能碎呢?玻璃杯这种不就是麽



[解决办法]
从地下室往上扔,也有可能碎~
[解决办法]
应该从2楼开始,至少要判断1楼会不会碎
[解决办法]
第一枚棋子从2楼开始往上判断(摔),第二枚棋子从100楼开始往下判断(摔).
[解决办法]
发现有些带星的还是比较喜欢表现得“特立独行”一些,呵呵



[解决办法]
要快啊!关键是要快啊,上面的说什么从2楼开始的都不是最快的。

方法:
步骤1:从已知楼层开始往下二分查找法找出第一个能摔碎楼层;(此时只剩一只棋子了)
步骤2:从上一步找出不能摔碎的最高楼层+1开始一层一层地向上,直到棋子摔碎.
步骤3:第二步中摔碎的楼层就是恰好能摔碎棋子的楼层.
========================================================================
例如:已知刚开始60层棋子会摔碎,
步骤1:二分查找第30层,如没有摔碎,二分查找到第45层,如果第45层摔碎了,45层是第一个能摔碎楼层,30层是此步骤中找出的不能摔碎的最高楼层.
步骤2:从第31层开始一层一层地向上摔,如果到第40层棋子摔碎了。
步骤3:第40层就是恰好能摔碎棋子的楼层



[解决办法]
应该是这样的
首先从第三层开始
3
6
9
.....
最坏的情况下,34次可以找到答案
二分法找不行,只有2个棋子,摔坏了就没了,不能用2分法找
[解决办法]
无理题
这个公司的垃圾不要进
[解决办法]
折半查找法+全循环!
------------------------------------------
0+100/2--〉50丢下
50不碎---〉100+50/2--〉75丢下
依次类推
如果碎了就依次用第二个子从该层依次(向上或向下)的丢。
[解决办法]
我觉得还不如一层一层的试算了
[解决办法]
题目说 "现在给你两枚这样的棋子,不考虑爬楼,下楼拣棋子等过程,用一个好的方案,快速的把恰好能摔碎棋子的楼层找到 "


不考虑爬楼梯和下楼捡棋子,那剩下的还有什么呢? "快速 "把楼层找到,这个快速除了爬楼梯捡棋子以外,还有什么呢? 还有两个时间,一个是棋子掉下来花的时间,一个是思考解决方案的时间.

如果爬楼梯和捡棋子的时间可以忽略,那么 "高效 "的比如二分法之类的可以枪毙掉了,因为主要节约的是扔的次数,节约的是爬楼梯和捡起子的时间.


最快的方法是最笨的方法,从2楼1层1层或2层2层向上试(至于是1层1层还是2层2层,你先想到哪个就用哪个,试的过程中想到更好的再继续向上试),根本思路是减少 "思考 "所花的时间.


在爬楼梯的时间忽略的情况下,假设大楼有300米,忽略空气阻力的话从2楼试到顶楼不过1分多钟,如果你思考时间超过一分多钟,在你思考的时间里,用最笨方法的人已经得到结果了,(而且很有可能只摔碎了一个棋子,还有一个可以带回家当纪念品~~~) 所以你用5分钟想出的 "最好 "的办法完全没有用, 题目要的是 "好 "(而不是最好)的方案, "快速 "地 "把楼层找到 "(找到的时间当然包括你思考的时间)....

一边从第2层向上试一边想的人肯定是最快的....
[解决办法]
首先从4楼..
4楼-> 碎了-> (用第二枚)2楼-> 碎了-> 就是2楼
4楼-> 碎了-> (用第二枚)2楼-> 没碎-> 就是3楼
4楼-> 没碎-> 继续往上
然后7楼..
7楼-> 碎了-> (用第二枚)5楼-> 碎了-> 就是5楼
7楼-> 碎了-> (用第二枚)5楼-> 没碎-> 就是6楼
7楼-> 没碎-> 继续往上
……
最坏要25次(摔到99是25次,如果没碎就是100楼碎了)
[解决办法]
还有一种方法...就是先在一段楼层扔..碎了的话在这个楼层之下一层一层的试,没碎的话继续加固定层数按刚才方法扔....
比如固定5层一次,则有6F开始,碎了,2F\3F\4F\5F有的话就是那一层,没有的话就是6F,没碎,继续+5,11F,11F碎了,从7F开始,7F\8F\9F\10F,同样,有的话就是那一层,没有的话就是11F,11F没碎..继续..
则有最多尝试次数为尝试在固定楼层扔的最后一个固定楼层倍数层+固定层数-1
比如5次一楼,扔到96楼才碎..结果试92F\93F\94F\95F,直到95F才碎,则就是
(100-1)/5+5-1
则有公式 (总共楼层数-1)/间隔楼层数+间隔楼层数-1


其中 (总共楼层数-1)/间隔楼层数 只取商,余数不管
通过计算,发现
间隔楼层 最多需要次数
5F 23
6F 21
7F 20
8F 19
9F 19
10F 18
11F 19
12F 19
13F 19
所以每间隔10楼测试一次最多需要18次,是最好方案
[解决办法]
首先从4楼..
4楼-> 碎了-> (用第二枚)2楼-> 碎了-> 就是2楼
4楼-> 碎了-> (用第二枚)2楼-> 没碎-> 就是3楼
4楼-> 没碎-> 继续往上
然后7楼..
7楼-> 碎了-> (用第二枚)5楼-> 碎了-> 就是5楼
7楼-> 碎了-> (用第二枚)5楼-> 没碎-> 就是6楼
7楼-> 没碎-> 继续往上
……
最坏要25次(摔到99是25次,如果没碎就是100楼碎了)
个个人觉得这个准确

热点排行