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