棋盘上的麦子

陈新龙在印度有一个古老的传说:国王为了奖赏国际象棋发明人——西萨·班·达依尔,答应西萨·班·达依尔会

陈新龙

在印度有一个古老的传说:国王为了奖赏国际象棋发明人——西萨·班·达依尔,答应西萨·班·达依尔会满足他所有的愿望。国王问他想要什幺,他对国王说:陛下,请您在这张棋盘上的第一个小格子里赏我两粒麦子,在第二个小格子里赏我四粒麦子,在第三个小格子里赏我八粒麦子,以后每一小格都比前一小格加一倍。按照这样的方法依次将棋盘上所有的64个格子填满即可。国王听完西萨·班·达依尔的愿望感觉太容易满足了,就下令让宰相前去准备这些麦子了,可是当人们把一袋一袋的麦子搬上来开始计数时,国王才发现,就是把全印度甚至全世界的麦子拿出来,也满足不了西萨·班·达依尔的要求,那幺聪明的你能够计算一下棋盘上的麦子的数量是多少吗?

可能不少同学看到题目的第一反应会觉得不就是在棋盘上摆放几粒麦子嘛,这有什幺难的,但是当我们把每个棋盘上的麦子数量列出来后发现问题没那幺简单,2、4、8、16 ……2^64,将这些麦子数量加起来是一个20位数!假设一粒麦子重约0.025克,那幺1斤(500克)麦子大约有20000颗(20000颗麦子==1斤),那幺棋盘上的麦子总数是3.7×10的19次方颗。就算一个人一年吃1000斤麦子,那幺棋盘上的麦子够14亿人吃上1000多年了!所以就算将全世界的麦子拿出来,也满足不了西萨·班·达依尔的要求,虽然我们不能拿出那幺多麦子,但是在编程的世界中我们能用Scratch将这个庞大的数字展示出来!

首先创建三个变量:n代表棋盘格的麦粒数,mun代表格子数或2的次方数,“总和”代表棋盘上所有麦粒的总和。创建一个列表将棋盘上每格的麦粒数填充到列表中,将n的初始值设置为1,重复执行64次,每次n的值变化都是比前一项增加一倍也就是乘2,并且将n值填充到列表中,同时计算数量的总和。当然这只是最简单的一种计算方法,即通过倍数增加的方式(图1)。

棋盘上的麦子

还有一种通过数学公式的方法直接将2的n次方表示出来,由于Scratch中没有直接的代码块可以使用,需要结合e^和ln的代码块才可以,比如e^(ln2)即e的ln2次方等于2;e^(ln2*64)表示2的64次方。在程序中则表示为:将n设为“向上取整e^(In2*num)”,大家也可以去尝试看看(图2)。

棋盘上的麦子

条条大路通罗马,不同的编程思路与方法往往会带来意想不到的结果与创新,聪明的你一起也来尝试新的编程思路吧。

声明:本文由发布者:大佬,文章来自网络整理或转载,如有侵权、虚假信息、错误信息或任何问题联系管理员处理!转转请注明出处:https://www.jiancai315.com/n/741923.html

(0)

你喜欢的