我们的生活中处处都存在着组合的问题,看下面的例子:

有3顶黑帽子,2顶白帽子.让三个人从前到后站成一排,给他们每个人头上戴一顶帽子.每个人都看不见自己戴的帽子的颜色,却只能看见站在前面那些人的帽子颜色.(所以最后一个人可以看见前面两个人头上帽子的颜色,中间那个人看得见前面那个人的帽子颜色但看不见在他后面那个人的帽子颜色,而最前面那个人谁的帽子都看不见.现在从最后那个人开始,问他是不是知道自己戴的帽子颜色,如果他回答说不知道,就继续问他前面那个人.事实上他们三个戴的都是黑帽子,那么最前面那个人一定会知道自己戴的是黑帽子.这是什么原因呢?

因为最前面的那个人听见后面两个人都说了“不知道”,他假设自己戴的是白帽子,于是中间那个人就看见他戴的白帽子.那么中间那个人可以利用组合知识作如下推理:“假设我戴了白帽子,那么最后那个人就会看见前面两顶白帽子,但总共只有两顶白帽子,他就应该明白他自己戴的是黑帽子,现在他说不知道,就说明我戴了白帽子这个假定是错的,所以我戴了黑帽子.”问题是中间那人也说不知道,所以最前面那个人知道自己戴白帽子的假定是错的,所以他推断出自己戴了黑帽子.

我们可以把这个问题做一个推广:有若干种颜色的帽子,每种若干顶.假设有若干个人从前到后站成一排,给他们每个人头上戴一顶帽子.每个人都看不见自己戴的帽子的颜色,而且每个人都看得见在他前面所有人头上帽子的颜色,却看不见在他后面任何人头上帽子的颜色.现在从最后那个人开始,问他是不是知道自己戴的帽子颜色,如果他回答说不知道,就继续问他前面那个人.一直往前问,那么一定有一个人知道自己所戴的帽子颜色.

不过这里有一些假设条件:

1)首先,帽子的总数一定要大于人数,否则帽子都不够戴.

2)“有若干种颜色的帽子,每种若干顶,有若干人”这句话的意思是队列中所有人都事先知道的,而且所有人都知道所有人都知道此事,所有人都知道所有人都知道所有人都知道此事,等等等等. 但在这个条件中的“若干”不一定非要具体一一给出数字来.这个信息具体地可以是象上面经典的形式,列举出每种颜色帽子的数目“有3顶黑帽子,2顶白帽子, 3个人”,也可以是“有红黄绿三种颜色的帽子各1顶2顶3顶,但具体不知道哪种颜色是几顶,有6个人”,甚至连具体人数也可以不知道,“有不知多少人排成一排,有黑白两种帽子,每种帽子的数目都比人数少1”,这时候那个排在最后的人并不知道自己排在最后──直到开始问他时发现在他回答前没有别人被问到,他才知道他在最后.在这个帖子接下去的部分当我出题的时候我将只写出“有若干种颜色的帽子,每种若干顶,有若干人”这个预设条件,因为这部分确定了,题目也就确定了.

3) 剩下的没有戴在大家头上的帽子当然都被藏起来了,队伍里的人谁都不知道都剩下些什么帽子.

当然,不是所有的预设条件都能给出一个合理的题目.比如有99顶黑帽子,99顶白帽子,2个人,无论怎么戴,都不可能有人知道自己头上帽子的颜色.另外,只要不是只有一种颜色的帽子,在只由一个人组成的队伍里,这个人也是不可能说出自己帽子的颜色的.

但是下面的题是合理的题目:

1)3顶红帽子,4顶黑帽子,5顶白帽子,10个人.

2)3顶红帽子,4顶黑帽子,5顶白帽子,8个人.

3)n顶黑帽子,n-1顶白帽子,n个人(n>0 ).

4)1 顶颜色1的帽子,2顶颜色2的帽子,……,99顶颜色99的帽子,100顶颜色100的帽子,共5000个人.

5) 有红黄绿三种颜色的帽子各1顶2顶3顶,但具体不知道哪种颜色是几顶,有6个人.

6) 有不知多少人(至少两人)排成一排,有黑白两种帽子,每种帽子的数目都比人数少1.