公司笔试题——猜字游戏、扔鸡蛋问题

本文解析了一个猜字游戏的策略,玩家B至少需要猜14次才能保证猜对A在1到100之间选择的数字,首次猜测的数字可以是9到14之间的任意数。此外,文章还探讨了如何在120层的大楼里用最少次数检测两个鸡蛋的硬度,最坏情况下需要至少15次试验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A、B两人玩猜字游戏,游戏规则如下:
A选定一个 [1,100]之间的数字背对B写在纸上,然后让B开始猜;
如果B猜的偏小,A会提示B这次猜的偏小;
一旦B某次猜的偏大,A就不再提示,此次之后B猜的偏小A也不会再提示,只回答猜对与否。
请问:B至少要猜( )次才能保证猜对?在这种策略下,B第一次猜测的数字是( )。
 
解析:

假设至少要猜x次。
第一次猜的数是y(1<=y<=x)(如果y>x,如果没有提示,那么无法用x次保证猜对。)

如果没有提示,说明猜的偏大,则从y往下一个一个猜(至多y-1次),如果提示偏小,第二次猜的数为y+(x-1),

如果没有提示,说明猜的偏大,则从y+(x-1)往下一个一个猜(至多x-1次),如果提示偏小,第三次猜的数为y+(x-1)+(x-2),

如果没有提示,说明猜的偏大,则从y+(x+1)+(x-2)往下一个一个猜(至多x-2次),如果提示偏小,第四次猜的数为y+(x-1)+(x-2)+(x-3),

如果没有提示,说明猜的偏大,则从y+(x-1)+(x-2)+(x-3)往下一个一个猜(至多x-3次),如果提示偏小,则第五次猜的数为y+(x-1)+(x-2)+(x-3)+(x-4),

依次类推....

最后得到: 
y+(x-1)+(x-2)+(x-3)+...+1>=100  (1)
1=<y<=x (2)

对方程(1)的解释:
因为猜的次数为x次,第x次猜的数为y+(x-1)+(x-2)+(x-3)+...+1,如果这个数小于100,此时出现两种情况:1)没有提示,说明猜的数偏大,此时不需要满足这个方程。2)提示偏小,说明猜的数偏小,但是这时已经猜了x次,用完了所有的机会,无法继续猜比y+(x-1)+(x-2)+(x-3)+...+1更大的数了。因为数的范围是[1,100],只要y+(x-1)+(x-2)+(x-3)+...+1>=100就不会出现第二种情况了。


题目要求至少要猜多少次才能保证猜对。根据方程1,为保证x最小,y应该取得最大值,即y=x,此时y+(x-1)+(x-2)+(x-3)+...+1=x+(x-1)+(x-2)+(x-3)+....+1=x(x+1)/2>=100
解方程得到x>=13.650971698...,即至少要猜14次,才能保证猜对。



问题的第二问:在这种策略下,B第一次猜的数字是多少?
上面提到,要保证x最小,y应该取最大值,即y=x。实际解方程x(x+1)/2>=100得到x>=13.650971698...,由于x必须为整数,所以x取14。由于x取14,比实际的值要大,所以y不一定要等于14。将x=14带入方程y+(x-1)+(x-2)+(x-3)+...+1>=100得到y>=9,所以y的取值范围是9到14之间的任意数。也就是说第一次猜的数可以是9到14之间的任意数。

猜数序列:(一直提示偏小的猜数序列)
9、22、34、45、55、64、72、79、85、90、94、97、99、100

10、23、35、46、56、65、73、80、86、91、95、98、100

11、24、36、47、57、66、74、81、87、92、96、99、100

12、25、37、48、58、67、75、82、88、93、97、100

13、26、38、49、59、68、76、83、89、94、98、100

14、27、39、50、60、69、77、84、90、95、99、100



下面还有一道类同的鸡蛋题:
假设你有2个鸡蛋,你现在想知道这些鸡蛋的硬度。你家住在120层高的大楼里,现在要在这座大楼上测试鸡蛋的硬度。每个鸡蛋的硬度相同,鸡蛋的硬度定义为:如果鸡蛋从第m层上掉下来没有破裂,而从第m+1层上掉下来就破裂了,那么这个鸡蛋的硬度就是m。某个鸡蛋如果在实验中破裂了就永远的损失了。要求提供一种方案,在最坏情况下做最少需要最少次数的实验即可把鸡蛋的硬度检验出来?

设:至少需要x次检测出来硬度等级。
    第一次实验楼层高度为y,
    那么1) y+(x-1)+(x-2)+...+1 >= 120
        2)  1<= y <=x
      若要x取最小,则y=x 那么求出来方程x(x+1)/2 >= 120    x>=15;
  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值