分享一下今天看到的几道逻辑题

一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其它人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什幺帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子?

答:有三个人戴黑帽。假设有N个人戴黑,当N=1时,戴黑人看见别人都为白则能肯定自己为黑。于是第一次关灯就应该有声。可以断定N> 1。对于每个戴黑的人来说,他能看见N-1顶黑帽 ,并由此假定自己为 白。但等待N-1次还没有人打自己以后,每个戴黑人都能知道自己也是黑的了。所以第N次关灯就有N个人打自己。

对一批编号为1~100,全部开关朝上(开)的灯进行以下*作:凡是1的倍数反方向拨一次开关;2的倍数反方向又拨一次开关;3的倍数反方向又拨一次开关……问:最后为关熄状态的灯的编号。

答:若实际操作求解会相当繁琐。我们知道,就某个亮着的灯而言,如果拨其开关的次数是奇数次,那么,结果它一定是关着的。根据题意可知,号码为N的灯,拨开关的次数等于N的约数的个数,约数个数是奇数,则N一定是平方数。因为10的平方等于100,可知100以内共有10个平方数,即,最后关熄状态的灯共有10盏,编号为1、4、9、16、25、36、49、64、81、100。
可以写一段代码跑一下:

var arr = [];
for(var i=0;i<100;i++){
    arr.push(true);
}

for(var j=0;j<100;j++){
    for(var i=0;i<100;i++){
        if((i+1)%(j+1) == 0){
            arr[i] = !arr[i];
        }
    }
}

for(var i=0;i<100;i++){
    if(arr[i] == false){
        console.log(i+1);
    }
}

运行结果也一样:

图片描述

你让某些人为你工作了七天, 你要用一根金条作为报酬.这根金条要被分成七块.你必须在每天的活干完后交给他们一块.如果你只能将这根金条切割两次,你怎样给这些工人分?

答:分成1、2、4;
第一天:给出去面值1的一块;
第二天:给出去面值2的一块,找回面值1的一块;
第三天:给出去面值1的一块;
第四天:给出去面值4的一块,找回面值2和面值1各一块;
第五天:给出去面值1一块;
第六天:给出去面值2的一块,找回面值1的一块;
第七天:给出去面值1的一块。

类似的题目还有:

引用文字

在房里有三盏灯,房外有三个开关,在房外看不见房内的情况,你只能进门一次,你用什 么方法来区分那个开关控制那一盏灯

答: 如果“在房外看不见”可理解为:“看不见哪个灯亮,而看得见房里亮不亮”的话:先看一个开关A,进门,确定一盏,然后斜下不亮的一盏,出门,关掉A,开B,看房里是否还亮。

八个球,从外观看是一样的,有一个球的质量重(或轻),其余七个球质量一样,称两次找出重的(或轻的)那个球。

上一题的变种题,更难一些:

有12个小球,从外观看是一样的,在这12个小球里有一个是坏球,和其它11个好球重量不同,但不知道是重还是轻,用一台天平只称三次,如何找出这个坏球,且要确定这个坏球是重了还是轻了。

https://wenku.baidu.com/view/...


yr1014
272 声望0 粉丝

« 上一篇
快排
下一篇 »
随笔