面试程序员遇到的思维逻辑有关问题,求解。

面试软件工程师遇到的思维逻辑问题,求解。。。
五顶帽子 三顶黑色、两顶白色。现在甲、乙、丙各戴了一顶,他们每个人都不能看到自己戴的帽子是什么颜色,但是可以看到其他人的。甲看了乙和丙的说:我不知道我戴的是什么颜色。乙看了甲和丙的也说:我不知道我戴的是什么颜色。丙说:本来我不知道自己戴的是什么颜色,但是现在我知道我戴的是什么颜色了!
求他们各戴的是什么颜色帽子!
------解决方案--------------------
。。
甲是白色 乙是白色 丙是黑色 
因为丙说我看到你们我就知道自己是什么颜色了 这句话就是答案 有三顶黑色帽子 两顶白色帽子 当然是在甲和乙都是白色帽子的前提下  丙才知道自己的颜色啊~~
虽然看似没有头绪 我也推算了半天 假设什么的 其实很简单啦~~哈哈
------解决方案--------------------
首先要知道这三个里,白色的不能出现两次个戴。所以就只剩下两种情况:三黑、两黑一白
三黑的话大家最后都不知结果的。排出掉。所以只剩下两黑一白,这个时候又要细分了。甲乙有一白丙为黑、甲乙都为黑柄为白 
在这两种里面再做选
------解决方案--------------------
首先要知道这三个里,白色的不能出现两次个戴。所以就只剩下两种情况:三黑、两黑一白
三黑的话大家最后都不知结果的。排出掉。所以只剩下两黑一白,这个时候又要细分了。甲乙有一白丙为黑、甲乙都为黑柄为白  
在这两种里面再做选 

------解决方案--------------------
丙可以确定为白色   因为甲看可以说乙白丙黑或丙白乙黑  乙黑甲黑   
乙可以说甲黑丙白或丙黑乙白  丙黑甲黑
 而丙说开始不晓得,后面才知道自己是什么颜色,所以甲乙同时为白色是不可能的,如果甲为黑色乙为黑色,自己不可能为黑色,所以丙只能白色,而甲乙可以为一黑一白,或两黑。
------解决方案--------------------
应该是三黑

------解决方案--------------------
甲:白,
乙:白,
丙:黑。


------解决方案--------------------
1:三黑:首选甲肯定是黑的,那么甲看见乙和丙都是黑的,所以自己可以是黑或者白;然后乙,乙看到甲个丙都是黑的,而甲说自己不知道自己是什么,那么甲可能看到是黑黑,或者黑白,也就是说乙知道自己和丙两个人一个肯定是黑的,一个则不确定,而丙是黑的,那么自己就不确定了;然后丙同理,从甲的话中得到乙所知的信息,然后乙既然说自己不确定,那么丙就可以确定自己一定的黑色的,因为如果自己是白色的话,乙是可以肯定自己是黑色的。
2.二黑一白:这个要分顺序,首先甲是黑色,乙是白色,丙是黑色,和上面的一样的道理,甲看到一白一黑,所以不确定自己的颜色,乙看到两黑,而从甲的话中又得不到有用的信息,所以自己也不确定,然后丙从甲中的话就可以推断出自己是黑色的。还有一种情况,是甲是白色的,然后看见两陀黑,所以不知道自己是什么颜色的,然后乙看见丙是黑色的,所以自己也可能是白色的,或者黑色的,所以自己也不知道,而丙,看到乙是白色的,所以自己只能是黑色的咯。当然,这个是不能考虑人物表情啊,还有抢答的别的什么情况的。
3.二百一黑,嗯,这个大家都懂的,没这个可能。
------解决方案--------------------
解析:
第一句话:不可能同时有两白;不解释....
第二句话:丙只可能是黑;如果丙是白的话,甲只能是黑(第一句话),甲说不知道后,乙看了看甲丙,想(如果自己是白的,甲肯定知道自己是黑了,因为自己和丙都是白的)
完毕!
丙必须是黑色,甲乙一黑一白,两种可能,都成立