推理题

问题:

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香烟的人有一个喝水的邻居

解决:

五种属性,每种五个,全排列一共 (5!)^5 = 24883200000种,用挪威住第一个,蓝色是挪威隔壁,牛奶在中间,绿色在白色左边,剔除掉一些,剩余99532800,把问题缩小到可接受的范围。

上python,itertools的permutations可以生成全排列,自定义一个函数转换tuple为list,剔除之后加循环判断。

两种条件:

xx的人也yy,说明xx和yy在各自列表中的位置相同

xx的人有个yy的邻居,说明xx和yy在各自列表中的索引相差1

QPthon on Android

QPython on Android

答案:

QPython Result

程序:

一开始用dict,国籍作为key,其余属性设置为一个list,作为key的value,跑起来之后发现dict是按照字母排序的,换list。

删除list的时候不能在循环的时候删除,这样会导致循环长度变化。应该是把要删除的append到一个临时列表,然后遍历这个临时的list。

QPython 在安卓上2分钟左右能跑出来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容