Python编程算法【十八】 舍罕王的失算
【案例内容】
相传国际象棋是古印度舍罕王的宰相达依尔发明的。 舍罕王十分喜爱国际象棋,便决定让宰相自己选择何种赏赐。这位聪明的宰相指着 8×8 共 64 格的象棋棋盘说:陛下,请您赏给我一些麦子吧。就在棋盘的第 1 格中放 1 粒,第 2 格放 2 粒,第 3 格放 4 粒,以后每一格都比前一格增加一倍,依此放完棋盘上 64 格,我就感激不尽了。舍罕王让人扛来一袋麦子,他要兑现的许诺。请编程求出国王总共需要将多少麦子赏赐给他的宰相。
【解题思路】
从题中可知,第1格放1粒,第 2 格放 2 粒,第 3 格放 4 粒,以后每一格都比前一格增加一倍,转换成数学问题,从第1格、第2格、第3格存放麦子的数量分别是:
那么以此类推,第64格存放麦子的数量是2的63次方,在Python中可用 2 ** 63 表示。
再用total变量存储累加的总和,就能算出从第1格到第64格总共需要的麦子总数,也就是国王需要赏赐的麦子数量。
【Python代码】

本题难度较低,重点是抓住每个格子都是2的幂次方,再用for循环进行累加即可解答出来。