论坛首页 入门技术论坛

村里有50个人,每个人有一条狗,即有50只狗……标准答案

浏览 69737 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2012-07-18  
这是什么逻辑,看了一遍,还真没怎么看懂
0 请登录后投票
   发表时间: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天.
2只病狗,判断出结果需要2天.
3只病狗,判断出结果需要3天.
4只病狗,判断出结果需要4天.
5只病狗,判断出结果需要5天.
6只病狗,判断出结果需要6天.
7只病狗,判断出结果需要7天.
8只病狗,判断出结果需要8天.
9只病狗,判断出结果需要9天.
10只病狗,判断出结果需要10天.
11只病狗,判断出结果需要11天.
12只病狗,判断出结果需要12天.
13只病狗,判断出结果需要13天.
14只病狗,判断出结果需要14天.
15只病狗,判断出结果需要15天.
16只病狗,判断出结果需要16天.
17只病狗,判断出结果需要17天.
18只病狗,判断出结果需要18天.
19只病狗,判断出结果需要19天.
20只病狗,判断出结果需要20天.
21只病狗,判断出结果需要21天.
22只病狗,判断出结果需要22天.
23只病狗,判断出结果需要23天.
24只病狗,判断出结果需要24天.
25只病狗,判断出结果需要25天.
26只病狗,判断出结果需要26天.
27只病狗,判断出结果需要27天.
28只病狗,判断出结果需要28天.
29只病狗,判断出结果需要29天.
30只病狗,判断出结果需要30天.
31只病狗,判断出结果需要31天.
32只病狗,判断出结果需要32天.
33只病狗,判断出结果需要33天.
34只病狗,判断出结果需要34天.
35只病狗,判断出结果需要35天.
36只病狗,判断出结果需要36天.
37只病狗,判断出结果需要37天.
38只病狗,判断出结果需要38天.
39只病狗,判断出结果需要39天.
40只病狗,判断出结果需要40天.
41只病狗,判断出结果需要41天.
42只病狗,判断出结果需要42天.
43只病狗,判断出结果需要43天.
44只病狗,判断出结果需要44天.
45只病狗,判断出结果需要45天.
46只病狗,判断出结果需要46天.
47只病狗,判断出结果需要47天.
48只病狗,判断出结果需要48天.
49只病狗,判断出结果需要49天.
50只病狗,判断出结果需要50天. 

0 请登录后投票
   发表时间:2012-08-01  
首先,这个题缺了两个充分条件,一是这些狗里肯定有病狗,二是村民都足够聪明,都能推理出正确答案,其实把村民换成逻辑学家要好一点。。
看很多人回答还在纠结看几天的问题。。村民只需要第一天看狗知道自己看到的有几条病狗就可以了。假设病狗有x跳,那村民看到病狗的条数只有x或者x-1两种可能。
引用
5·第三天,听见一阵枪响,表示第三天有人判断自己的狗是不是病狗,但是没人知道是不是所有的病狗都死了,好狗都活着。

这条是很奇怪的,所有病狗的主人看到的情况都是一样的(我是指病狗条数),那他们应该(肯定)也是在同一时间发现自己的狗是病狗的(如果他们没推断错误的话),如果要不能满足我说的第二个条件的话,那这种推理题肯定是无解的。

然后,请参照lz所说的据说是正确答案的正确答案吧,我觉得是没问题的。。
0 请登录后投票
   发表时间: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天.
2只病狗,判断出结果需要2天.
3只病狗,判断出结果需要3天.
4只病狗,判断出结果需要4天.
5只病狗,判断出结果需要5天.
6只病狗,判断出结果需要6天.
7只病狗,判断出结果需要7天.
8只病狗,判断出结果需要8天.
9只病狗,判断出结果需要9天.
10只病狗,判断出结果需要10天.
11只病狗,判断出结果需要11天.
12只病狗,判断出结果需要12天.
13只病狗,判断出结果需要13天.
14只病狗,判断出结果需要14天.
15只病狗,判断出结果需要15天.
16只病狗,判断出结果需要16天.
17只病狗,判断出结果需要17天.
18只病狗,判断出结果需要18天.
19只病狗,判断出结果需要19天.
20只病狗,判断出结果需要20天.
21只病狗,判断出结果需要21天.
22只病狗,判断出结果需要22天.
23只病狗,判断出结果需要23天.
24只病狗,判断出结果需要24天.
25只病狗,判断出结果需要25天.
26只病狗,判断出结果需要26天.
27只病狗,判断出结果需要27天.
28只病狗,判断出结果需要28天.
29只病狗,判断出结果需要29天.
30只病狗,判断出结果需要30天.
31只病狗,判断出结果需要31天.
32只病狗,判断出结果需要32天.
33只病狗,判断出结果需要33天.
34只病狗,判断出结果需要34天.
35只病狗,判断出结果需要35天.
36只病狗,判断出结果需要36天.
37只病狗,判断出结果需要37天.
38只病狗,判断出结果需要38天.
39只病狗,判断出结果需要39天.
40只病狗,判断出结果需要40天.
41只病狗,判断出结果需要41天.
42只病狗,判断出结果需要42天.
43只病狗,判断出结果需要43天.
44只病狗,判断出结果需要44天.
45只病狗,判断出结果需要45天.
46只病狗,判断出结果需要46天.
47只病狗,判断出结果需要47天.
48只病狗,判断出结果需要48天.
49只病狗,判断出结果需要49天.
50只病狗,判断出结果需要50天. 

判断50只只要两天,每个人都看到49只病狗。第一天以为自己那只没有生病,都没杀。第二天,知道昨天没人杀,全部杀了。

0 请登录后投票
   发表时间: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天.
2只病狗,判断出结果需要2天.
3只病狗,判断出结果需要3天.
4只病狗,判断出结果需要4天.
5只病狗,判断出结果需要5天.
6只病狗,判断出结果需要6天.
7只病狗,判断出结果需要7天.
8只病狗,判断出结果需要8天.
9只病狗,判断出结果需要9天.
10只病狗,判断出结果需要10天.
11只病狗,判断出结果需要11天.
12只病狗,判断出结果需要12天.
13只病狗,判断出结果需要13天.
14只病狗,判断出结果需要14天.
15只病狗,判断出结果需要15天.
16只病狗,判断出结果需要16天.
17只病狗,判断出结果需要17天.
18只病狗,判断出结果需要18天.
19只病狗,判断出结果需要19天.
20只病狗,判断出结果需要20天.
21只病狗,判断出结果需要21天.
22只病狗,判断出结果需要22天.
23只病狗,判断出结果需要23天.
24只病狗,判断出结果需要24天.
25只病狗,判断出结果需要25天.
26只病狗,判断出结果需要26天.
27只病狗,判断出结果需要27天.
28只病狗,判断出结果需要28天.
29只病狗,判断出结果需要29天.
30只病狗,判断出结果需要30天.
31只病狗,判断出结果需要31天.
32只病狗,判断出结果需要32天.
33只病狗,判断出结果需要33天.
34只病狗,判断出结果需要34天.
35只病狗,判断出结果需要35天.
36只病狗,判断出结果需要36天.
37只病狗,判断出结果需要37天.
38只病狗,判断出结果需要38天.
39只病狗,判断出结果需要39天.
40只病狗,判断出结果需要40天.
41只病狗,判断出结果需要41天.
42只病狗,判断出结果需要42天.
43只病狗,判断出结果需要43天.
44只病狗,判断出结果需要44天.
45只病狗,判断出结果需要45天.
46只病狗,判断出结果需要46天.
47只病狗,判断出结果需要47天.
48只病狗,判断出结果需要48天.
49只病狗,判断出结果需要49天.
50只病狗,判断出结果需要50天. 

判断50只只要两天,每个人都看到49只病狗。第一天以为自己那只没有生病,都没杀。第二天,知道昨天没人杀,全部杀了。

神逻辑。。程序员的世界远远不是你的终点啊,少年

0 请登录后投票
   发表时间:2012-09-06  
应该说一下50个人必须看其余的49条狗。
0 请登录后投票
   发表时间:2012-09-06  
这是博弈论问题
0 请登录后投票
   发表时间: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天.
2只病狗,判断出结果需要2天.
3只病狗,判断出结果需要3天.
4只病狗,判断出结果需要4天.
5只病狗,判断出结果需要5天.
6只病狗,判断出结果需要6天.
7只病狗,判断出结果需要7天.
8只病狗,判断出结果需要8天.
9只病狗,判断出结果需要9天.
10只病狗,判断出结果需要10天.
11只病狗,判断出结果需要11天.
12只病狗,判断出结果需要12天.
13只病狗,判断出结果需要13天.
14只病狗,判断出结果需要14天.
15只病狗,判断出结果需要15天.
16只病狗,判断出结果需要16天.
17只病狗,判断出结果需要17天.
18只病狗,判断出结果需要18天.
19只病狗,判断出结果需要19天.
20只病狗,判断出结果需要20天.
21只病狗,判断出结果需要21天.
22只病狗,判断出结果需要22天.
23只病狗,判断出结果需要23天.
24只病狗,判断出结果需要24天.
25只病狗,判断出结果需要25天.
26只病狗,判断出结果需要26天.
27只病狗,判断出结果需要27天.
28只病狗,判断出结果需要28天.
29只病狗,判断出结果需要29天.
30只病狗,判断出结果需要30天.
31只病狗,判断出结果需要31天.
32只病狗,判断出结果需要32天.
33只病狗,判断出结果需要33天.
34只病狗,判断出结果需要34天.
35只病狗,判断出结果需要35天.
36只病狗,判断出结果需要36天.
37只病狗,判断出结果需要37天.
38只病狗,判断出结果需要38天.
39只病狗,判断出结果需要39天.
40只病狗,判断出结果需要40天.
41只病狗,判断出结果需要41天.
42只病狗,判断出结果需要42天.
43只病狗,判断出结果需要43天.
44只病狗,判断出结果需要44天.
45只病狗,判断出结果需要45天.
46只病狗,判断出结果需要46天.
47只病狗,判断出结果需要47天.
48只病狗,判断出结果需要48天.
49只病狗,判断出结果需要49天.
50只病狗,判断出结果需要50天. 

判断50只只要两天,每个人都看到49只病狗。第一天以为自己那只没有生病,都没杀。第二天,知道昨天没人杀,全部杀了。

???这个什么逻辑?难道有说总共有50条都是病狗吗?你是狗主人,你看到了49条病狗,第一天没人开枪,能知道自己的狗是病狗?任何一个狗主人都会以为总共有>=49条病狗,而无法判断自己那条是否病狗啊,所以等到50天每人开枪的时候才能知道原来不是49条。

 

所以这个逻辑 : 

判断50只只要两天,每个人都看到49只病狗。第一天以为自己那只没有生病,都没杀。第二天,知道昨天没人杀,全部杀了。

是想当然的。

0 请登录后投票
   发表时间:2012-09-11  
如果有3条有病的狗,那么第二天就应该都杀掉了,不会到第二天啊,我是这么觉得的。因为第二天大家看到的还是同样的病狗。所以不会等到第3天啊。这个逻辑上还是有问题吧。
0 请登录后投票
   发表时间:2012-09-12  
WingForce 写道
这是博弈论问题

博你妹,这个是大学离散数学的逻辑论,你以前学过充分不必要条件没有
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics