陳新龍
在印度有一個古老的傳說:國王為了獎賞國際象棋發(fā)明人——西薩·班·達依爾,答應西薩·班·達依爾會滿足他所有的愿望。國王問他想要什么,他對國王說:陛下,請您在這張棋盤上的第一個小格子里賞我兩粒麥子,在第二個小格子里賞我四粒麥子,在第三個小格子里賞我八粒麥子,以后每一小格都比前一小格加一倍。按照這樣的方法依次將棋盤上所有的64個格子填滿即可。國王聽完西薩·班·達依爾的愿望感覺太容易滿足了,就下令讓宰相前去準備這些麥子了,可是當人們把一袋一袋的麥子搬上來開始計數(shù)時,國王才發(fā)現(xiàn),就是把全印度甚至全世界的麥子拿出來,也滿足不了西薩·班·達依爾的要求,那么聰明的你能夠計算一下棋盤上的麥子的數(shù)量是多少嗎?
可能不少同學看到題目的第一反應會覺得不就是在棋盤上擺放幾粒麥子嘛,這有什么難的,但是當我們把每個棋盤上的麥子數(shù)量列出來后發(fā)現(xiàn)問題沒那么簡單,2、4、8、16 ……2^64,將這些麥子數(shù)量加起來是一個20位數(shù)!假設一粒麥子重約0.025克,那么1斤(500克)麥子大約有20000顆(20000顆麥子==1斤),那么棋盤上的麥子總數(shù)是3.7×10的19次方顆。就算一個人一年吃1000斤麥子,那么棋盤上的麥子夠14億人吃上1000多年了!所以就算將全世界的麥子拿出來,也滿足不了西薩·班·達依爾的要求,雖然我們不能拿出那么多麥子,但是在編程的世界中我們能用Scratch將這個龐大的數(shù)字展示出來!
首先創(chuàng)建三個變量:n代表棋盤格的麥粒數(shù),mun代表格子數(shù)或2的次方數(shù),“總和”代表棋盤上所有麥粒的總和。創(chuàng)建一個列表將棋盤上每格的麥粒數(shù)填充到列表中,將n的初始值設置為1,重復執(zhí)行64次,每次n的值變化都是比前一項增加一倍也就是乘2,并且將n值填充到列表中,同時計算數(shù)量的總和。當然這只是最簡單的一種計算方法,即通過倍數(shù)增加的方式(圖1)。
還有一種通過數(shù)學公式的方法直接將2的n次方表示出來,由于Scratch中沒有直接的代碼塊可以使用,需要結合e^和ln的代碼塊才可以,比如e^(ln2)即e的ln2次方等于2;e^(ln2*64)表示2的64次方。在程序中則表示為:將n設為“向上取整e^(In2*num)”,大家也可以去嘗試看看(圖2)。
條條大路通羅馬,不同的編程思路與方法往往會帶來意想不到的結果與創(chuàng)新,聰明的你一起也來嘗試新的編程思路吧。