精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2012-07-18
这是什么逻辑,看了一遍,还真没怎么看懂
|
|
返回顶楼 | |
发表时间:2012-07-23
public class DogTest { /** * * @param dogNum 几只病狗 * @return 几天 */ public static int test(int dogNum) { int minDog =1;//至少有几只病狗 题目设定的条件 int i=1;//第几次判断 (过了几天) while(true){ if(dogNum-minDog==0){//有病狗的人 会看到 minDog-1只病狗 所以他能判定自己的狗是病狗 return i; } minDog++;//如果判断一轮后 不能够确认,那么说明 minDog要比现在设置的值大 既最少有minDog+1只 i++; } //通过该方法可以看出 有几只病狗需要几次判断. } public static void main(String args[]){ for(int i=1;i<=50;i++){ //i是病狗的取值范围 System.out.println(i+"只病狗,判断出结果需要"+test(i)+"天."); } } } 运行结果: 1只病狗,判断出结果需要1天. |
|
返回顶楼 | |
发表时间:2012-08-01
首先,这个题缺了两个充分条件,一是这些狗里肯定有病狗,二是村民都足够聪明,都能推理出正确答案,其实把村民换成逻辑学家要好一点。。
看很多人回答还在纠结看几天的问题。。村民只需要第一天看狗知道自己看到的有几条病狗就可以了。假设病狗有x跳,那村民看到病狗的条数只有x或者x-1两种可能。 引用 5·第三天,听见一阵枪响,表示第三天有人判断自己的狗是不是病狗,但是没人知道是不是所有的病狗都死了,好狗都活着。
这条是很奇怪的,所有病狗的主人看到的情况都是一样的(我是指病狗条数),那他们应该(肯定)也是在同一时间发现自己的狗是病狗的(如果他们没推断错误的话),如果要不能满足我说的第二个条件的话,那这种推理题肯定是无解的。 然后,请参照lz所说的据说是正确答案的正确答案吧,我觉得是没问题的。。 |
|
返回顶楼 | |
发表时间:2012-09-05
lou1052 写道
public class DogTest { /** * * @param dogNum 几只病狗 * @return 几天 */ public static int test(int dogNum) { int minDog =1;//至少有几只病狗 题目设定的条件 int i=1;//第几次判断 (过了几天) while(true){ if(dogNum-minDog==0){//有病狗的人 会看到 minDog-1只病狗 所以他能判定自己的狗是病狗 return i; } minDog++;//如果判断一轮后 不能够确认,那么说明 minDog要比现在设置的值大 既最少有minDog+1只 i++; } //通过该方法可以看出 有几只病狗需要几次判断. } public static void main(String args[]){ for(int i=1;i<=50;i++){ //i是病狗的取值范围 System.out.println(i+"只病狗,判断出结果需要"+test(i)+"天."); } } } 运行结果: 1只病狗,判断出结果需要1天. 判断50只只要两天,每个人都看到49只病狗。第一天以为自己那只没有生病,都没杀。第二天,知道昨天没人杀,全部杀了。 |
|
返回顶楼 | |
发表时间:2012-09-05
marcuse 写道
lou1052 写道
public class DogTest { /** * * @param dogNum 几只病狗 * @return 几天 */ public static int test(int dogNum) { int minDog =1;//至少有几只病狗 题目设定的条件 int i=1;//第几次判断 (过了几天) while(true){ if(dogNum-minDog==0){//有病狗的人 会看到 minDog-1只病狗 所以他能判定自己的狗是病狗 return i; } minDog++;//如果判断一轮后 不能够确认,那么说明 minDog要比现在设置的值大 既最少有minDog+1只 i++; } //通过该方法可以看出 有几只病狗需要几次判断. } public static void main(String args[]){ for(int i=1;i<=50;i++){ //i是病狗的取值范围 System.out.println(i+"只病狗,判断出结果需要"+test(i)+"天."); } } } 运行结果: 1只病狗,判断出结果需要1天. 判断50只只要两天,每个人都看到49只病狗。第一天以为自己那只没有生病,都没杀。第二天,知道昨天没人杀,全部杀了。 神逻辑。。程序员的世界远远不是你的终点啊,少年 |
|
返回顶楼 | |
发表时间:2012-09-06
应该说一下50个人必须看其余的49条狗。
|
|
返回顶楼 | |
发表时间:2012-09-06
这是博弈论问题
|
|
返回顶楼 | |
发表时间:2012-09-07
marcuse 写道
lou1052 写道
public class DogTest { /** * * @param dogNum 几只病狗 * @return 几天 */ public static int test(int dogNum) { int minDog =1;//至少有几只病狗 题目设定的条件 int i=1;//第几次判断 (过了几天) while(true){ if(dogNum-minDog==0){//有病狗的人 会看到 minDog-1只病狗 所以他能判定自己的狗是病狗 return i; } minDog++;//如果判断一轮后 不能够确认,那么说明 minDog要比现在设置的值大 既最少有minDog+1只 i++; } //通过该方法可以看出 有几只病狗需要几次判断. } public static void main(String args[]){ for(int i=1;i<=50;i++){ //i是病狗的取值范围 System.out.println(i+"只病狗,判断出结果需要"+test(i)+"天."); } } } 运行结果: 1只病狗,判断出结果需要1天. 判断50只只要两天,每个人都看到49只病狗。第一天以为自己那只没有生病,都没杀。第二天,知道昨天没人杀,全部杀了。 ???这个什么逻辑?难道有说总共有50条都是病狗吗?你是狗主人,你看到了49条病狗,第一天没人开枪,能知道自己的狗是病狗?任何一个狗主人都会以为总共有>=49条病狗,而无法判断自己那条是否病狗啊,所以等到50天每人开枪的时候才能知道原来不是49条。
所以这个逻辑 : 判断50只只要两天,每个人都看到49只病狗。第一天以为自己那只没有生病,都没杀。第二天,知道昨天没人杀,全部杀了。 是想当然的。 |
|
返回顶楼 | |
发表时间:2012-09-11
如果有3条有病的狗,那么第二天就应该都杀掉了,不会到第二天啊,我是这么觉得的。因为第二天大家看到的还是同样的病狗。所以不会等到第3天啊。这个逻辑上还是有问题吧。
|
|
返回顶楼 | |
发表时间:2012-09-12
WingForce 写道 这是博弈论问题
博你妹,这个是大学离散数学的逻辑论,你以前学过充分不必要条件没有 |
|
返回顶楼 | |