逻辑题 | 舍罕王失算问题

舍罕王失算

国际象棋是古印度舍罕王的宰相达依尔发明的,舍罕王奖励宰相自己要求奖励,宰相指着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("  请输入格数 n :>_ ");
	scanf("%d", &n);
	t = 1;
	s = 1;
	for (i = 2; i <= n; i++)
	{
		t = t * 2;
		s = s + t;
	}
	v = s / 2.4e7;
	p = v / 2.48e9;
	if (n <= 40)
	{
		printf("  总麦粒数为:%.0f\n", s);
	}
	else
	{
		printf("  总麦粒数约为:%.3e\n", s);
	}
	printf("  小麦重量约为:%.0f 吨\n", v);
	printf("  约相当于世界粮食年总产量的%.0f倍\n", p);
	return 0;
}

程序运行示例:

 

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值