棋盘上的麦子

2022-04-28 14:45陈新龙
电脑报 2022年15期
关键词:次方麦粒棋盘

陈新龙

在印度有一个古老的传说:国王为了奖赏国际象棋发明人——西萨·班·达依尔,答应西萨·班·达依尔会满足他所有的愿望。国王问他想要什么,他对国王说:陛下,请您在这张棋盘上的第一个小格子里赏我两粒麦子,在第二个小格子里赏我四粒麦子,在第三个小格子里赏我八粒麦子,以后每一小格都比前一小格加一倍。按照這样的方法依次将棋盘上所有的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)。

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

猜你喜欢
次方麦粒棋盘
谁偷了麦粒
蚂蚁和麦粒
寻找1024的因数
考考你看数字猜成语
手表+手链+戒指 N次方组合
从麦粒到面包
一组计算题的启示
棋盘人生
棋盘里的天文数字
棋盘疑案