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

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层的高楼,已知从某一层楼开始往下抛一枚棋子,棋子会摔碎。现在给你两枚这样的棋子,不考虑爬楼,下楼拣棋子等过程,用一个好的方案,快速的把恰好能摔碎棋子的楼层找到(答案应该好猜,推理过程就显得比较重要了)。

...全文
348 41 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
呵呵...老大,我忘了怎么写函数了...
加载更多回复(21)

11,850

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧