Skip to content

Commit bfe6342

Browse files
committed
docs: fix typo in algorithm-stories.md
1 parent e50e2e7 commit bfe6342

File tree

1 file changed

+10
-12
lines changed

1 file changed

+10
-12
lines changed

docs/algorithm-stories.md

+10-12
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
有一天,岛上突然来了一位游客,她完全处于状况外。于是,她对和尚们说:“你们当中至少有一位的眼睛是红色的”。
1717

18-
![island-eye-color](island-eye-color.jpg)
18+
![island-eye-color](/images/island-eye-color.jpg)
1919

2020
这名无心的游客当天就离开了小岛,而和尚们却因第一次听到有关眼睛颜色的话题而惴惴不安。当晚,小岛上开始出现了可怕的事情......
2121

@@ -41,16 +41,16 @@ if ((思考时间 > 2 分钟) || (已经知道答案了吗)) {
4141

4242
再考虑更复杂的情况。如果有 3 个红眼和尚,又会是怎样呢?平时,这 3 位会看到两个红眼和尚,所以听到游客的话后,都不会选择自杀。第一晚过后,他们又会想,另外两个和尚在第二天晚上都会自杀(就是前面探讨的“有两个红眼和尚”的情形)。到了第三天早上,看到本以为会自杀的另两个和尚并没有自杀时,根本没想到自己也是红眼和尚的这 3 人会同时受到极大的打击。因为,两个红眼和尚第二天晚上也没有自杀,这表明还有一个红眼和尚,而这第三个红眼和尚正是自己。
4343

44-
这种逻辑会反复循环。因此,该题的答案是“若小岛上共有 n 个红眼和尚,那么第 n 个晚上这些和尚会同时自杀”。离入,小当时共有 5 个红眼和尚,那么第 5 个晚上,这 5 个红眼和尚会同时自杀。
44+
这种逻辑会反复循环。因此,该题的答案是“若小岛上共有 n 个红眼和尚,那么第 n 个晚上这些和尚会同时自杀”。例如,小岛上共有 5 个红眼和尚,那么第 5 个晚上,这 5 个红眼和尚会同时自杀。
4545

46-
这道题其实可以利用递归的方法。假设红眼和尚人数 N 为 10,那么我们可以适用 N 为 9 的逻辑。同理,N 为 8 或 7 时,都适用 `N-1` 时的逻辑。将 `N=1`,即“只有一个红眼和尚”视为终止条件,即可得出最终结果。这种过程与计算机算法中函数的递归调用过程完全相同或给
46+
这道题其实可以利用递归的方法。假设红眼和尚人数 N 为 10,那么我们可以适用 N 为 9 的逻辑。同理,N 为 8 或 7 时,都适用 `N-1` 时的逻辑。将 `N=1`,即 “只有一个红眼和尚” 视为终止条件,即可得出最终结果。这种过程与计算机算法中函数的递归调用过程完全相同
4747

4848
## 找出剩下的一个数
4949
有一个能保存 99 个数值的数组 `item[0], item[1],...item[98]`。从拥有 `1~100` 元素的集合 {1,2,3,...,100} 中,随机抽取 99 个元素保存到数组。集合中共有 100 个元素,而数组只能保存 99 个数值,所以集合中会剩下一个元素。编写程序,找出最后剩下的数。
5050

5151
还是先花 2 分钟想一想吧。
5252

53-
好了,这个问题其实非常简单,但没能正确理解提议的读者可能认为很难。答案如下代码所示。
53+
好了,这个问题其实非常简单,但没能正确理解题意的读者可能认为很难。答案如下代码所示。
5454

5555
```java
5656
int res = 5050;
@@ -63,11 +63,11 @@ System.out.println("最后剩下的数是:" + res);
6363
如果将集合的 100 个数值累加,会得到 5050。依次从 5050 减去数组中的 99 个数值,最后的数就是没能保存到数组的那个剩余数值。也许很多读者想到了与此相近的算法。即使没有得到正确答案也不用失望,因为真正应该感到失望的人是那些没能找到答案后轻易选择放弃、想要直接查看正确答案的人。
6464

6565
## 说出2199年7月2日是星期几
66-
先公布答案吧,2199年7月2日是星期二。其实可以靠运气蒙一下,准确率是 1/7。要想真正求出正确答案,过程并不简单。也许有些读者会自己设计精妙算法求出正确答案,但我还是想通过约翰•康威教授的“末日”算法进行说明。
66+
先公布答案吧,2199 年 7 月 2 日是星期二。其实可以靠运气蒙一下,准确率是 1/7。要想真正求出正确答案,过程并不简单。也许有些读者会自己设计精妙算法求出正确答案,但我还是想通过约翰•康威教授的“末日”算法进行说明。
6767

68-
末日算法虽然不是“游戏”,但在聚会中能够引起初次见面的异性的好奇。因此,为不少“花花公子”踏入数学殿堂做出了很大贡献。例如,“美丽的女士,求告诉我您的生日,让我猜猜是星期几。”“请您随便说一个年份,我会猜出当年的情人节是星期几”。虽然听起来比较肉麻,不过这样就能一下子吸引对方的注意。
68+
末日算法虽然不是“游戏”,但在聚会中能够引起初次见面的异性的好奇。因此,为不少“花花公子”踏入数学殿堂做出了很大贡献。例如,“美丽的女士,请告诉我您的生日,让我猜猜是星期几。” “请您随便说一个年份,我会猜出当年的情人节是星期几”。虽然听起来比较肉麻,不过这样就能一下子吸引对方的注意。
6969

70-
康威教授的末日算法执行环境就是我们今天使用的“公历”环境。
70+
康威教授的末日算法执行环境就是我们今天使用的“**公历**”环境。
7171

7272
首先,先理清楚**什么是闰年**。闰年是年份能被 4 整除但不能被 100 整除,或者能被 400 整除的年份。闰年 2 月有 29 天,而平年 2 月是 28 天。
7373

@@ -110,13 +110,13 @@ boolean isLeapYear(int year) {
110110
6, 11.5, 17, 23, 28, 34, 39.5, 45, 51, 56, 62, 67.5, 73, 79, 84, 90, 95.5
111111
```
112112

113-
就是说,1900 年“末日”是星期三,那么 1906,1917,1923... “末日”也是星期三, 11.5 表示 1911 年的“末日”是星期二(-1),而1912 年的“末日”是星期四(+1)。记住这个列表,我么就能够胜场所有 20 世纪年份的“末日基准”了。
113+
就是说,1900 年“末日”是星期三,那么 1906,1917,1923... “末日”也是星期三, 11.5 表示 1911 年的“末日”是星期二(-1),而1912 年的“末日”是星期四(+1)。记住这个列表,我们就能够算出所有 20 世纪年份的“末日基准”了。
114114

115115
如果一个美丽的姑娘说“我的生日是 1992.9.13” 时,我们可以马上说出当天的星期。既然康威列表有 90 这个数字,表示 1990 年的“末日”也是星期三,那么 1901 年(平年)“末日”是星期四(+1),1902 年(闰年)“末日”是星期六(+2),所以 9.5/9.12 也是星期六,1992.9.13 就是星期日。
116116

117117
不过,**年份跨越世纪时,康威列表就会失去作用**
118118

119-
题目中问的是 2199.7.2 的星期,如果不能得知 2199 年“末日”是星期几,那么这道题很难求解。对于不同世纪的年份,没有什么特别的方法能够猜出“末日”的星期。只能将被 100 整除的年份表示为日历形式时,得到一些规律而已
119+
题目中问的是 2199.7.2 的星期,如果不能得知 2199 年“末日”是星期几,那么这道题很难求解。对于不同世纪的年份,没有什么特别的方法能够猜出“末日”的星期。只能将被 100 整除的年份表示为日历形式时,从中得到一些规律而已
120120

121121
||||||||
122122
|---|---|---|---|---|---|---|
@@ -133,9 +133,7 @@ boolean isLeapYear(int year) {
133133
感受到康威教授末日算法的精妙之处了吧。
134134

135135
## 梅森素数
136-
马林•梅森是法国哲学家、修道士,
137-
138-
16 世纪,数论领域存在着一个错误的假设,而一直被认为是事实。根据这个假设,对所有素数 p,2<sup>p</sup>-1 也是素数。将素数 2,5,7 带入,结果均为负数。
136+
马林•梅森是法国哲学家、修道士。16 世纪,数论领域存在着一个错误的假设,而一直被认为是事实。根据这个假设,对所有素数 p,2<sup>p</sup>-1 也是素数。将素数 2,5,7 带入,结果均为负数。
139137

140138
从直观角度看,对素数 p,总有 2<sup>p</sup>-1 也是素数的假设成立。不过,仅仅通过几个结果就想判断命题真伪,这在数学中是最“无知”的行为。这种代入几个变量进行的测试往往以程序能够正常运行的“晴天”作为前提条件,如果遇到“雨天”,这种只经过松散测试的程序会发生很多意想不到的问题。算法的内部逻辑应该紧凑,不给 Bug 任何可乘之机。
141139

0 commit comments

Comments
 (0)