c语言:1000瓶水,有一瓶是有毒的,现共有10只老鼠,怎么判断毒水?

问题:1000瓶水,其中有一瓶是有毒的,一只老鼠喝下毒水会一天之后死亡,现在共有10只老鼠,怎么判断哪一瓶水是毒水?

分析:2^10=1024,则可以考虑利用二进制求解

解:给1000瓶水依次标号1至1000,将10只老鼠从右向左排成一列,第一瓶水让右边第1只老鼠喝,第2瓶水让第2只老鼠喝,第3瓶水让第1,2只老鼠喝,则第4瓶水让第3只老鼠喝,......第1000瓶水依次让第4,6,7,8,9,10只老鼠喝,记死亡的老鼠为1,未死亡的老鼠为0,按照二进制表示数的方法求出这个数,就知道哪瓶是毒水

时间: 2024-12-24 23:29:49

c语言:1000瓶水,有一瓶是有毒的,现共有10只老鼠,怎么判断毒水?的相关文章

十只老鼠和一千瓶毒药的故事。。。

问题描述:有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药. 任何喝下毒药的生命都会在一星期之后死亡.现在你只有10只小白鼠和1个星期的时间,如何检验出哪个瓶子有毒药? 解答: 根据2^10=1024,所以10个老鼠可以确定1000个瓶子具体哪个瓶子有毒.具体实现跟3个老鼠确定8个瓶子原理一样.000=0001=1010=2011=3100=4101=5110=6111=7一位表示一个老鼠,0-7表示8个瓶子.也就是分别将1.3.5.7号瓶子的药混起来给老鼠1吃,2.3.6.7

有 3 只老鼠,8 瓶水,其中一个有毒,喝到有毒的水之后,老鼠一周后会准时死亡.

题目:有 3 只老鼠,8 瓶水,其中一个有毒,喝到有毒的水之后,老鼠一周后会准时死亡. 按照要求,写个算法,找出哪个有毒 (以程序语言实现,语言不限) 基本思路: 给瓶子编号 0~7,并把编号翻译成二进制串,刚好可以用三位二进制来表示.让三只老鼠分别对应三位二进制,然后形成如下交叉表: 老鼠1 老鼠2 老鼠3 0 = 0 0 0 1 = 0 0 1 2 = 0 1 0 3 = 0 1 1 4 = 1 0 0 5 = 1 0 1 6 = 1 1 0 7 = 1 1 1 其中二进制位为 1 的地方表

一个有趣的问题,用10只蚂蚁从1000瓶水中找出唯一有毒的一瓶

其实原文说的是10只小鼠,考虑到一些生物伦理问题,小石哥把它换成了10只蚂蚁,可是蚂蚁也是生命.其实不用这么当真的,又不是真的要做这个事. 再具体说一下问题,有1000个装有水的瓶子,其中有一瓶水是有毒的,蚂蚁喝了有毒的水后会在一周的死亡,现在给你10只蚂蚁,和一周的时间,你要从这1000瓶水中找出有毒的那瓶. 作者给出了这样的答案: 把问题简化一下,3只蚂蚁,7个瓶子. 000=0,001=1,010=2,011=3,100=4,101=5,110=6,111=7 把1,3,5,7号瓶子的水给

javascript计算啤酒2元一瓶,4个盖换一瓶,2个瓶换一瓶,10元钱最多喝多少瓶

var n = 0//当前剩下多少瓶加上喝赢了多少瓶 var x = 5//初始多少瓶 var y = 0//除了喝掉的,剩下多少瓶 var z = 0;//总数 var arr = []//定义一个数组存放值 arr.push(x);//先把最初始瓶数添加到数组 //程序1 var fn = function(s){ y = s -4; //剩下多少瓶 s = y + parseInt(s/4) + parseInt(s/2);//剩下多少瓶加上赢了多少瓶 n = s//赋值给上面的n arr

java:50瓶可乐,每喝三瓶给你一瓶,请问最后喝了多少瓶.

package jihuoma; //50瓶可乐,每喝三瓶给你一瓶,请问最后喝了多少瓶. public class Test1 { public static void main(String[] args) { int count=50;//统计喝了多少瓶,初值50瓶 int sum=50;//初值50瓶可乐 while(true) { sum=sum-3;//喝三瓶后送一瓶,即下面的count++ count++;//送一瓶 sum=sum+1;//送了一瓶后,那么剩余的可乐数量加1 if(

100元买酒,2元买一瓶,两个空瓶换一瓶,求最后能买多少瓶

最近碰到一道题目.就是关于酒瓶的(100元买酒,2元买一瓶,两个空瓶换一瓶,求最后能买多少瓶). 刚开始没头绪,仔细一想原来不过如此. 经过分析,所能买到的酒瓶等于    最后所有的空瓶数 java代码求解如下: import java.util.Scanner; public class Bottle {         //空瓶数 static int blank=0; //直接能买到的酒瓶数 static int sum=0; public static void main(String[

假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料?

这大家可以这么想 一共有50瓶, 喝完三瓶 + 1 喝完三瓶 + 1 那么 50 - 3 + 1 -3 + 1 以此类推知道...最后剩余的可乐数小于3退出.那么依旧题意可以写出. package cccc; public class Buy { public static void main(String[] args) { int number = 50;         //初始饮料总数 int i=0;            //兑换次数 while(true){ n -= 3;    

啤酒2块一瓶,4个瓶盖可换1瓶,2个空瓶可换1瓶,10块钱可以喝多少瓶?

1.编程的写法: using System; using System.Collections.Generic; using System.Text; namespace SlowX.CalcEgg { class Program { protected static string ShowStr(int theResult, int KP, int PG) { return theResult + "瓶啤酒." + KP + "空瓶." + PG + "

【c语言】 在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目

// 在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目 #include <stdio.h> #define MAX 100000 int main() { int i; float sum = 0; float ave,mei; for( i = 1; i <= 1000; i++) { printf("请输入要捐款的金额:"); scanf("%f",&mei); sum = s