锁定老帖子 主题:国王与100个囚犯
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (6)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-04
Crusader 写道 晕,你自己想想你被关进去后,第一天释放的是你,你知不知道?
看问题不能太死哦~ 这一百人需要决定一个计数者~ 只有计数者才可以开灯,其他的都只能对开着的灯进行且只能进行一次关闭操作 当计数者放出来时如果灯关闭了,则再打开,计数+1 最后也需要计数者宣布结束~~~ 所以不考虑程序的局部变量或者全局变量,现实中确实需要决定一个计数者,可以不是第一个释放的,但必须是一百个人! 所以我觉得提问者的问题没有错~程序永远只是现实不完全的映射~ |
|
返回顶楼 | |
发表时间:2010-08-04
sunson468 写道 Crusader 写道 晕,你自己想想你被关进去后,第一天释放的是你,你知不知道?
看问题不能太死哦~ 这一百人需要决定一个计数者~ 只有计数者才可以开灯,其他的都只能对开着的灯进行且只能进行一次关闭操作 当计数者放出来时如果灯关闭了,则再打开,计数+1 最后也需要计数者宣布结束~~~ 所以不考虑程序的局部变量或者全局变量,现实中确实需要决定一个计数者,可以不是第一个释放的,但必须是一百个人! 所以我觉得提问者的问题没有错~程序永远只是现实不完全的映射~ 一句话,没搞明白结束条件 |
|
返回顶楼 | |
发表时间:2010-08-04
linghongli 写道 普通囚犯如果被放出去,在第一次遇见灯是打开的时候将其关闭(其他情况,即遇见灯是熄灭或第2,3,4..次遇见灯是开着的时候什么也不做) 。 第一个人怎么知道每个人都已经出去了呢,出去的人是随机产生的,可能有的人永远都没出去过 第一个问题,请仔细看思路和程序。。。 至于“可能有的人永远都没出去过”,有这种可能啊,这只能说明随机数序列生成有问题(也就是说产生随机数序列的方法是个笨蛋写的),而且题目要求的是囚犯自身如何确定100个囚犯都被放风过的思路 |
|
返回顶楼 | |
发表时间:2010-08-04
Crusader 写道 linghongli 写道 普通囚犯如果被放出去,在第一次遇见灯是打开的时候将其关闭(其他情况,即遇见灯是熄灭或第2,3,4..次遇见灯是开着的时候什么也不做) 。 第一个人怎么知道每个人都已经出去了呢,出去的人是随机产生的,可能有的人永远都没出去过 第一个问题,请仔细看思路和程序。。。 至于“可能有的人永远都没出去过”,有这种可能啊,这只能说明随机数序列生成有问题(也就是说产生随机数序列的方法是个笨蛋写的),而且题目要求的是囚犯自身如何确定100个囚犯都被放风过的思路 程序中判断100个人都出去放风过的方法明显有问题 |
|
返回顶楼 | |
发表时间:2010-08-04
哎,我发现很多人都喜欢砖牛角。。。
第一天的判断,请把题目中的囚犯也想成是真实的人,他们不是猪。。 至于为什么要第一个人来记数?当然也可以不,如果不指定第一个人的话(但必须在事前指定一个固定的囚犯),第一天的判断也可以取消,但是囚犯坐牢的天数将增加 |
|
返回顶楼 | |
发表时间:2010-08-04
linghongli 写道 Crusader 写道 linghongli 写道 普通囚犯如果被放出去,在第一次遇见灯是打开的时候将其关闭(其他情况,即遇见灯是熄灭或第2,3,4..次遇见灯是开着的时候什么也不做) 。 第一个人怎么知道每个人都已经出去了呢,出去的人是随机产生的,可能有的人永远都没出去过 第一个问题,请仔细看思路和程序。。。 至于“可能有的人永远都没出去过”,有这种可能啊,这只能说明随机数序列生成有问题(也就是说产生随机数序列的方法是个笨蛋写的),而且题目要求的是囚犯自身如何确定100个囚犯都被放风过的思路 程序中判断100个人都出去放风过的方法明显有问题 很明显题目不完善,可楼主自己想当然啦。笨蛋写的随机会完全不放出去!?那聪明蛋写的随机就会全放出去了,说了完全随机,谁要求随机一定是要在100内随机,还是要在没出去的人那随机。好笑的很。 |
|
返回顶楼 | |
发表时间:2010-08-04
Crusader 写道 哎,我发现很多人都喜欢砖牛角。。。
第一天的判断,请把题目中的囚犯也想成是真实的人,他们不是猪。。 至于为什么要第一个人来记数?当然也可以不,如果不指定第一个人的话(但必须在事前指定一个固定的囚犯),第一天的判断也可以取消,但是囚犯坐牢的天数将增加 还是那句话,你要用严谨的编程,那题目也要严谨,好么?不要别人说出题目的问题,你就这样,接受一下别人的想法,你要是题目很严谨了,谁跟你这钻牛角尖,是你自己的在钻牛角尖而已。 |
|
返回顶楼 | |
发表时间:2010-08-04
Crusader 写道 哎,我发现很多人都喜欢砖牛角。。。
第一天的判断,请把题目中的囚犯也想成是真实的人,他们不是猪。。 至于为什么要第一个人来记数?当然也可以不,如果不指定第一个人的话(但必须在事前指定一个固定的囚犯),第一天的判断也可以取消,但是囚犯坐牢的天数将增加 选择一个计数人是没错的,至于是第几个都没关系,但判断结束的条件不明白,还请哪位高 手 指 点指点 |
|
返回顶楼 | |
发表时间:2010-08-04
不指定第一天的人也行,下面是代码,但是不指定第一天的人作为记数员,坐牢天数不是最优
import java.util.Date; import java.util.Random; public class King_100Prisoner { // 记数器(由记数员囚犯用来计数囚犯放出去的人数) private int count; // 记数员囚犯编号 private int counterman; // 用来标记1到50编号的囚犯是否被放过风且关过灯 private long _1_50 = 0; // 用来标记51到100编号的囚犯是否被放过风且关过灯 private long _51_100 = 0; // 标识灯是否亮着 private boolean isLightOn = false; // 标记经过的天数 private int day = 0; // 返回放风囚犯记数 public int getCount(){ return count; } // 返回经历的天数 public int getDay(){ return day; } // constructor public King_100Prisoner(boolean isLightOn, int counterman){ this.isLightOn = isLightOn; this.counterman = counterman; } // 囚犯被放风 public void releasePrisoner(int prisoner){ // 放出不明生物 if(prisoner>100 || prisoner<0){ System.out.println("放出不明生物"); return; } // 如果放风的是记数员 if(prisoner == counterman){ // 如果灯是关着的,将其打开,并且放风计数加1 if(!isLightOn){ isLightOn = true; count++; } }else{ // 如果放风的是普通囚犯 // 如果囚犯未关过灯 if((prisoner&_1_50)==0 && (prisoner&_51_100)==0){ // 第一次放风遇见灯开着,关灯,记录该囚犯放过风且关过灯 if(isLightOn==true){ isLightOn = false; if(prisoner<=50){ _1_50 = _1_50 | (0x1L<<(prisoner-1)); }else{ _51_100 = _51_100 | (0x1L<<(prisoner-1)); } // 遇见灯是关着的,什么也不做 }else{ // do nothing } // 如果囚犯已经关过灯 ,什么也不做 }else{ // do nothing } } day++; } public static void main(String[] args) { King_100Prisoner demo = new King_100Prisoner(true, 12); Random r = new Random(new Date().getTime()); int prisoner = 0; while(demo.getCount()<100){ prisoner = r.nextInt(100)+1; demo.releasePrisoner(prisoner); } System.out.println("需要"+demo.getDay()+"天"); } } |
|
返回顶楼 | |
发表时间:2010-08-04
最后修改:2010-08-04
jammyjaccy 写道 linghongli 写道 Crusader 写道 linghongli 写道 普通囚犯如果被放出去,在第一次遇见灯是打开的时候将其关闭(其他情况,即遇见灯是熄灭或第2,3,4..次遇见灯是开着的时候什么也不做) 。 第一个人怎么知道每个人都已经出去了呢,出去的人是随机产生的,可能有的人永远都没出去过 第一个问题,请仔细看思路和程序。。。 至于“可能有的人永远都没出去过”,有这种可能啊,这只能说明随机数序列生成有问题(也就是说产生随机数序列的方法是个笨蛋写的),而且题目要求的是囚犯自身如何确定100个囚犯都被放风过的思路 程序中判断100个人都出去放风过的方法明显有问题 很明显题目不完善,可楼主自己想当然啦。笨蛋写的随机会完全不放出去!?那聪明蛋写的随机就会全放出去了,说了完全随机,谁要求随机一定是要在100内随机,还是要在没出去的人那随机。好笑的很。 随机的数字不在100内,请看程序是放出的什么?不明生物。 就算在题目中,你认为会放出不是囚犯的东西。 不能保证指定范围内的随机数都能够产生的随机算法,不是有问题的算法?这种算法就算是java之父写出来的,它也是笨蛋 |
|
返回顶楼 | |