c语言的一道题

在很久很久以前,有一个国王他拥有n瓶葡萄酒,而且国王将在24小时之后举办一个大型的庆祝活动,并且这n瓶葡萄酒都将用于宴请,但是国王从007里得到消息,这n瓶酒中的其中一瓶... 在很久很久以前,有一个国王他拥有n瓶葡萄酒,而且国王将在24小时之后举办一个大型的庆祝活动,并且这n瓶葡萄酒都将用于宴请,但是国王从007里得到消息,这n瓶酒中的其中一瓶,被人下了毒,而且这种毒为慢性毒药,中毒者当场不会有任何表现,而是在10-20小时左右才会表现出中毒的状态并且毒发身亡。国王拥有成千上万的奴隶正在建造新宫殿,他可以从中选取一定数量的奴隶来充当试酒的人,而因为选中的人会耽误工程,所以他希望能够选最少的奴隶试酒并找出那瓶毒酒。
假如你就是那个国王,假如你拥有足够多用于试酒的杯子,你最少需要多少名奴隶才能在24小时之内找出哪一瓶为毒酒

输入要求
输入数据有多组。
每组数据仅有一个整数N(1 ≤ N ≤ 100,000),N代表国王拥有的葡萄酒数量。

输出要求
每组输出一行包含一个整数M,M为国王最少需要试毒的奴隶

示例输入

2

示例输出输出

1
展开
 我来答
heptnaol
2016-10-22 · TA获得超过7259个赞
知道大有可为答主
回答量:7120
采纳率:78%
帮助的人:1742万
展开全部
这些以身试毒的奴隶,就是一堆bit,1到N这些数字对应酒的编号,所有bit0(化成二进制,最低位是0bit)是1的数字,都给一个人喝;所有bit1是1的数字,依次类推,这样到20小时后,所有中毒奴隶代表的bit组成的数,就是有毒那瓶酒。
如果酒的数量恰好是2的整数次幂,拿走编号最大的那瓶,剩下的按同样方法做。
例:
3瓶酒,要2个人,编号为0和1,0喝最低位是1的酒,即1号瓶和3号瓶
1喝bit1是1的酒,即2号瓶喝3号瓶
这样,结果显而易见,最终中毒的bit是1,没中毒的是0,这个二进制数就是要找的那瓶酒的编号。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式