看到的一个问题,挺敢兴趣的。大家一起来探讨下看有几个解法,(主要是思路)
题目是:
1、 在一条街上,有5座房子,喷了5种颜色。
2、 每个房里住着不同国籍的人
3、 每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物
约束条件:
1、 英国人住红色房子
2、 瑞典人养狗
3、 丹麦人喝茶
4、 绿色房子在白色房子左面
5、 绿色房子主人喝咖啡
6、 抽Pall Mall 香烟的人养鸟
7、 黄色房子主人抽、Dunhill 香烟
8、 住在中间房子的人喝牛奶
9、 挪威人住第一间房
10、抽Blends香烟的人住在养猫的人隔壁
11、养马的人住抽Dunhill 香烟的人隔壁
12、抽Blue Master的人喝啤酒
13、德国人抽Prince香烟
14、挪威人住蓝色房子隔壁
15、抽Blends香烟的人有一个喝水的邻居
问题是:谁养鱼?
[解决办法]
house结构(index,color,nation,drink,cigar,pet)
约束条件:
assert(findByNation('British')==findByColor('red'))
...
assert(findByColor('green')+1==findByColor('white'))
...
assert(abs(findByCigar('Blends')-findByPet('cat')==1)
笨方法:暴力全排列,一个一个试约束条件,全部满足后再找养鱼的是谁
[解决办法]
200个聪明人的逻辑思维游戏.最具挑战和智慧的逻辑思维谜题.[陈书凯编著]
建议楼主看一下这本书。
[解决办法]
可以转为覆盖问题。