舍罕王失算
国际象棋是古印度舍罕王的宰相达依尔发明的,舍罕王奖励宰相自己要求奖励,宰相指着8*8共64格的棋盘说:“陛下,请您赏给我一些麦子吧,就在棋盘的第1格中放1粒,第2个放2粒,第3格放4粒,以后每一格都比前一格增加一倍,以此放完棋盘上的64格,我就感激不尽了。”舍罕王让人扛来一袋麦子,他要兑现他的许诺。
问题:
摆放完棋盘上的64格共要多少麦子赏赐他的宰相?
这些小麦合多少吨(1吨小麦约 2.4e7 粒)?
这些小麦相当于世界粮食年总产量(以 2014 年度数据 2.48e9 吨计)的多少倍?
设计求解要点:
这是一个典型的等比数列求解问题。
第一格 1 粒,第二格 2 粒,第三格 4=2*2 粒,……,第 i 格为2^(i-1)粒,于是总粒数为:
s = 1+2+4+8+……+2^63
为一般计,设共有 n 个格。
设置求和 i (2~n) 循环,在循环中通过 t=t*2 计算第 i 格的麦粒数,体现每一格为其前一格的 2 倍。再通过 s=s+t 把每一格的麦粒数累加到和变量 s,即可实现该等比数列各项的求和。求出的总粒数为 s ,通过 v=s/2.4e7 把 s 粒小麦的重量折合为 v 吨。
p = v/2.48e9
所得 p 即为相当于全世界粮食总产量的倍数。
程序设计:
#include <stdio.h>
#include <math.h>
int main()
{
double t, s, v, p;
int i, n;
printf(" 请输入格数