转过来一道逻辑问题,挺有意思的

txlicenhe 2007-07-25 02:39:08
http://community.csdn.net/Expert/topic/5673/5673295.xml?temp=.7943537
主  题: 也搞一个逻辑问题,大家看看谁能很快回答上来
作  者: gameboxer ()
等  级:
信 誉 值: 100
所属社区: .NET技术 非技术区
问题点数: 20
回复次数: 18
发表时间: 2007-7-24 22:48:56

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

...全文
288 41 打赏 收藏 举报
写回复
41 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mogui_ 2008-07-21
二分查找法是吧?
  • 打赏
  • 举报
回复
xiaoku 2007-07-25
老大,还是找蔡特助去压吧...跟以前那个好像的.
  • 打赏
  • 举报
回复
gahade 2007-07-25
这题有很多未知数没给出,比如:
1.每层楼有多高不知道
2.棋子的材料是什么不知道(玻璃的一楼有可能就碎,塑料的100楼也有可能不碎)
3.同一高度同一棋子也有可能出现不同的结果(考虑风向等因素)
  • 打赏
  • 举报
回复
xiaoku 2007-07-25
hehe ...今天又有!
  • 打赏
  • 举报
回复
txlicenhe 2007-07-25
晚上又要去喝酒,真痛苦。
  • 打赏
  • 举报
回复
txlicenhe 2007-07-25
我回复的邮件:

倒,看来以后过来要自己带盒饭了。 ^_^

-----原始邮件-----
发件人: **************
发送时间: 2007年7月25日 14:37
收件人: *****************
抄送: ***********************
主题: 答复: RE:PCB帐套与组装帐套不能娴接?


大师:要快想办法解决,要出报表啦!
100多的自助餐不能白吃的啊!辛苦啦,多帮忙,我现在要外出!一切拜托啦!

-----邮件原件-----
发件人: ***********
发送时间: 2007年7月25日 9:09
收件人: *********
抄送: ************
主题: RE:PCB帐套与组装帐套不能娴接?

大师:
现在进行到最后,发现pcb帐套与组装帐套不能娴接,PCB机板的加权价无法直接跑
到组装帐套,变成:我们要用手工将机板的加权价输到组装才能完成完.
这样,工作量大,大量的手工操作又容易出错,如何解决才好,请指教!
  • 打赏
  • 举报
回复
xiaoku 2007-07-25
是的...
  • 打赏
  • 举报
回复
xiaoku 2007-07-25
我的思路跑到自然语言上了...
  • 打赏
  • 举报
回复
txlicenhe 2007-07-25
呵,要是不学C#可能就不会写错了。
  • 打赏
  • 举报
回复
xiaoku 2007-07-25
create function f(@i int)
returns int
as
begin
if @i<0 return(0)
if @i>0 return(f(@i-1)+@i)
end

看我写的!晕了...
  • 打赏
  • 举报
回复
txlicenhe 2007-07-25
野蛮人的好象有点道理。

不过在SQL版居然连最简单的递归函数都忘记,是不是该打PP呀?
  • 打赏
  • 举报
回复
txlicenhe 2007-07-25
Create Function f(@i int)
Returns int
As
Begin
declare @a int
if (@i <=0 )
set @a = 0
Else
set @a = dbo.f(@i-1) + @i
Return @a
End
  • 打赏
  • 举报
回复
xiaoku 2007-07-25
老大帮我写个 sql 的f(int i)

我写的都报错了...我非常郁闷啊.
  • 打赏
  • 举报
回复
xiaoku 2007-07-25
靠...我还是没能在sql中写个递归了...郁闷...无比.

不过在c#到写了一个.
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
for(int i=0;i<100;i++)
{
if(f(i)>100&f(i-1)<100)
{
Console.WriteLine(i);
break;
}
}
Console.WriteLine(f(14).ToString());
Console.ReadLine();
}

static int f(int i)
{
if(i<=0) return 0;
else return f(i-1)+i;
}
可以得到开始应该先从14楼开始仍...然后也简单了...在没坏之前每次仍都要比之前的数少1,这样,坏了,再一楼一楼的仍...最多14步...

依稀记得的.以前看过这样的题.
  • 打赏
  • 举报
回复
mao5588 2007-07-25
应该是18次
  • 打赏
  • 举报
回复
mao5588 2007-07-25
最多19次就能找出答案
  • 打赏
  • 举报
回复
mao5588 2007-07-25
把楼分成10份,10楼扔没碎,上20楼,没碎上30楼 类推
比如50楼扔下碎了,那么就是说在40-50楼之间,从40到50一层一层试,正好2个棋子
  • 打赏
  • 举报
回复
wuxinyuzhu 2007-07-25
最简单的方法就是站在原地往上抛 每一次增加一定的高度 就可以找到你要找的答案了
呵呵..
  • 打赏
  • 举报
回复
xiaoku 2007-07-25
连基本的函数都忘了...
  • 打赏
  • 举报
回复
xiaoku 2007-07-25
呵呵...老大,我忘了怎么写函数了...
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
非技术版
加入

1.1w+

社区成员

MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
申请成为版主
帖子事件
创建了帖子
2007-07-25 02:39
社区公告
暂无公告