目录
73 逮公鸡
70 跳跃成对1
71 标记方格1
72 标记方格2
73 逮公鸡
我认为参考答案的思路是对的,但是结果错了,14应该改成13,其他地方都不需要改。
76 高效的车
78 直三格板平铺
80 王子之旅
其实如果n=3k+1的情况从左上角开始,那么3种情况就几乎是一样的了。
81 再论名人问题
总结起来就是2个步骤,第1个步骤找出唯一可能是名人的人,需要n-1步,也就是每一步排除一个人
第2个步骤考虑这个人到底是不是名人,需要问其他n-1个人是否认识他,他是否认识其他n-1个人,一共需要2(n-1)-1步,减掉1是因为有一步和第1个步骤里面重复了。
84 煎饼排序
这个翻转的方法很简单,寥寥数语就已经说清楚了。至于在最糟糕的情况下所需要的翻转次数,此处略掉了(书上有,不过挺长的),很简单,就是2n-3
然而在编程之美上有个很难的问题,问,任意次序的n个烙饼翻转排序所需的最小翻转次数是多少?
这个问题太难了,即使是n=14也是目前未解之谜。
85 散步谣言1
还有一种思路,出现第一个知道所有谣言的人至少需要n-1步,唯一的方法就是接力
从出现第一个人开始,到所有人都知道所有谣言,也至少需要n-1步,唯一的方法也是接力
当然,接力的顺序不固定。
86 散步谣言2
上面提到的文章,第一篇是Spreading gossip efficiently,内容如下:
——————————————————————————————————————————
——————————————————————————————————————————
第2篇是Hard-to-Solve Math Puzzles by Derrick Niederman,我没找到免费阅读的地方。
87 倒置的玻璃杯
88 蟾蜍和青蛙
上述网站即Interactive Mathematics Miscellany
其中有2个网页,Toads And Frogs Puzzle、Toads And Frogs Puzzle in 2D
内容刚好可以对应我的2篇博客37跳棋(4)、28象棋(3)
90 座位重排
生成全排列的Johnson–Trotter算法
91 水平的和垂直的多米诺骨牌
92 梯形平铺
93 击中战舰
94 搜索排好序的表
100 个不同的数字被写在 100 张卡片上, 每张卡片一个数字。卡片被排列成 10行10列, 在每一行 (从左至右) 每一列 (从上至下) 都是递增的顺序。每一张卡片都是面朝下的, 所以你看不见写在卡片上的数字是多少。现在请问你能不能设计一个算法, 使得你在翻动卡片次数小于 20 的情况下, 即可以确定一个给定的数字是否被写在其中的一张卡片上?
答案: 首先从序列右上角的卡片开始翻转, 然后将它的数字和正在搜寻的数字 进行对比。如果两个数字相等, 该问题就解决了。如果搜索的数字小于翻转卡片上 的数字, 那么, 搜索的数字不可能在最后一列, 因此可以移动到卡片左边相邻的列。 如果搜索的数字大于翻转卡片上的数字, 那么, 搜索的数字不可能处在第一行上, 因此可以移动到下面的一行。重复以上操作, 直到找到正在搜索的数字,或者搜索已经超出了边界条件, 至此, 问题就得以解决了。
该算法翻转卡片所产生的序列, 形成了一条锯齿线, 由序列的右上角向左或者向下到达某一卡片的片段构成。这样的最长曲线是在左下角结束的, 并且总共翻起了 19 张卡片。不可能存在更长的锯齿线了, 因为它不可能有超过 9 个水平的片段 和 9 个垂直的片段。
95 最大-最小称重
96 平铺楼梯区域
平铺楼梯区域