听故事学语言 · 第八章 循环,重复的艺术
天行健,君子以自强不息。《周易·乾·象传》
零基础的建议从序章读起。
一、一千盏灯的合同
上一章收尾时留了一份合同。第二章那一千盏灯,第六章用数学给了答案,第七章许诺让机器亲手拨一遍。今天交割。
把规则重述一遍。一千盏灯编上号,从一号到一千号,起初全灭着。一千个人排好队,第一个人把一号灯的倍数全部拨一遍,第二个人把二号灯的倍数全部拨一遍,第 i 个人只拨 i 的倍数,每人只走一遍。拨一次亮,再拨一次灭。一千个人都走完之后,哪些灯还亮着?
第六章用数学算过。约数成双成对地出现,唯一落单的是完全平方数,所以亮着的灯恰好是 1、4、9 一路到 961,共三十一盏。数学给过答案了,机器认不认,让机器亲手拨一遍。
立刻遇到一个现实问题。要老老实实模拟一千个人轮流走过一千盏灯,就得给每盏灯配一个格子,记下它是亮是灭。一千个格子,那件工具叫数组,要到数组那一章才登场。本章的工具箱里只有变量和分支,怎么办?
换个问法。不问每一轮谁动了手,改问每一盏灯被几只手拨过。哪些人拨得到第 i 盏灯?凡是编号能整除 i 的人都会拨它,也就是 i 的每一个约数各拨一次。于是第 i 盏灯被拨的次数就是 i 的约数个数,只消数一数它是奇是偶。这件事不需要数组,两层循环就够了,外层逐盏灯,内层逐只手。
【例1】 一千盏灯,机器亲手拨一遍。</

实现100%通过率-171主机测评](https://www.171host.com/wp-content/uploads/2026/10/20261026191216-6adfa61015a7f-220x80.gif)




