資訊內(nèi)容
水手分椰子:用Scratch 巧解奧數(shù)題
在一次航海中,有三名水手和一只猴子因船舶失事而被困在一個(gè)荒島上,他們發(fā)現(xiàn)島上僅有的食物是椰子。水分們齊心協(xié)力,勞累了一天,收集了許多椰子。天黑了,他們決定先去睡覺,等第二天起來后再分配椰子。
當(dāng)天夜里,一個(gè)水手醒來,決定拿走屬于他的那份椰子而不想等到早上。他把椰子分為相等的三堆,但發(fā)現(xiàn)多出了一個(gè)椰子,于是把這個(gè)椰子給了猴子。接著他藏好了自己那份椰子就去睡覺了。不久,另一個(gè)水手也醒來,他做了與第一個(gè)水手同樣的事,也把多出的一個(gè)椰子給了猴子。而當(dāng)?shù)谌齻€(gè)水手醒來后,他也跟前兩個(gè)水手一樣分了椰子,也把多出的一個(gè)椰子給了猴子。
第二天早晨,當(dāng)三名水手起來時(shí),他們決定把椰子平分為三堆,每人一份,并把多出的一個(gè)椰子也給了猴子。
小海豚科學(xué)館請(qǐng)你算一算,水手們最少收集到多少個(gè)椰子?
【編程解題】
根據(jù)故事中的描述,每一個(gè)水手分椰子的過程是,把一個(gè)椰子給猴子,再把椰子平均分為3份,自己藏起一份,留下兩份。水手們?cè)陬^天夜里和第二天早晨共分了4次椰子。
小海豚科學(xué)館推薦你采用枚舉法,讓椰子數(shù)從4開始遞增,并判斷椰子數(shù)能否用4次分完。如果剛好能分完則求得問題的解;否則繼續(xù)增加椰子數(shù),再模擬分椰子,直到剛好分完為止。
下面小海豚科學(xué)館給出用枚舉算法描述的流程圖如下。
接下來,根據(jù)上面介紹的算法,小海豚科學(xué)館帶你來編寫主程序。
首先,我們創(chuàng)建一個(gè)名為“x”的變量,并賦初值為4;再用“重復(fù)執(zhí)行直到……”指令構(gòu)建一個(gè)循環(huán)結(jié)構(gòu),在循環(huán)體中逐一增加變量“x”的值。這就是一個(gè)枚舉算法的基本結(jié)構(gòu)。
對(duì)于每一個(gè)“x”的值,我們調(diào)用模塊“水手分椰子”進(jìn)行檢測(cè),如果椰子能分完,則結(jié)束循環(huán),輸出問題的解。否則就繼續(xù)檢測(cè)下一個(gè)“x”的值。
接下來,我們還需要一個(gè)重要的模塊?“水手分椰子”來檢測(cè)列舉的椰子數(shù)是否能分完。小海豚科學(xué)館帶你繼續(xù)編寫模塊。
模塊:水手分椰子
創(chuàng)建一個(gè)名為“水手分椰子”的模塊,參數(shù)是一個(gè)名為“椰子”的數(shù)字參數(shù)。
創(chuàng)建一個(gè)名為“椰子”的變量,并將參數(shù)“椰子”賦給變量“椰子”。請(qǐng)注意參數(shù)“椰子”和變量“椰子”的指令塊顏色不同。
接下來,在一個(gè)“重復(fù)執(zhí)行……次”的循環(huán)結(jié)構(gòu)中對(duì)變量“椰子”進(jìn)行3次迭代。
根據(jù)故事描述,3名水手夜里先后偷偷分了3次椰子,每一次都是把1個(gè)椰子給了猴子,再把剩下的椰子均分為3份,自己藏起來1份,只留下2份。因此,這個(gè)過程可以表示如下:
當(dāng)天亮后,水手們一起又分了一次椰子。把一個(gè)椰子給了猴子,其余的均分成3份,一人一份。可以用下面等式表示:
然后把這個(gè)等式放入一個(gè)“如果……那么……否則”的條件判斷指令中。
如果條件滿足,則把變量“椰子分完”設(shè)定為1,否則設(shè)定0。
到此,模塊“水手分椰子”的代碼編寫完畢,模塊的代碼如下。
到這里,解決“水手分椰子”問題的全部代碼編寫完畢,小海豚科學(xué)館給出完整代碼清單如下。
????????
點(diǎn)擊綠旗運(yùn)行程序,得到結(jié)果:椰子總數(shù)最少是79。
????????
【試一試】
“水手分椰子”問題據(jù)說是偉大物理學(xué)家狄拉克提出的趣味數(shù)學(xué)題,曾登載在美國《星期六晚郵報(bào)》上。后經(jīng)美國數(shù)學(xué)科普大師馬丁·加德納的介紹后更是廣為流傳。1979年,諾貝爾物理學(xué)獎(jiǎng)獲得者李政道博士在中國科技大學(xué)少年班講學(xué)時(shí),對(duì)“水手分椰子”問題作了簡(jiǎn)單變形,提出了一個(gè)五猴分桃的問題:
五只猴子采得一堆桃,它們約定次日早上起來分。半夜里,一只猴子偷偷起來,把桃均分成五堆后,發(fā)現(xiàn)還多一個(gè),它吃了這桃子,拿走了其中一堆。第二只猴子醒來,又把桃子均分成五堆后,還是多了一個(gè),它也吃了這個(gè)桃子,拿走了其中一堆。第三只,第四只,第五只猴子都依次如此做了。請(qǐng)問桃子數(shù)最少有多少個(gè)?
請(qǐng)你試一試,用Scratch編寫程序求解這個(gè)問題。
聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過郵件及時(shí)和我們聯(lián)系刪除

- 上一篇
Scratch第二講:會(huì)動(dòng)的名字
上一講介紹了Scratch的編程工具和一點(diǎn)點(diǎn)編程概念,今天CC哥教大家如何做一個(gè)小程序。屏幕上的每一字母用鼠標(biāo)一點(diǎn)就會(huì)動(dòng)。
- 下一篇
【Scratch實(shí)例】小恐龍祝你生日快樂(part 2)
04 恐龍?zhí)? 恐龍?zhí)韬偷?部分“02 蛋糕的燭光搖曳”類似,只需要循環(huán)切換角色造型就能滿足要求。需要注意的是,在切換造型的間隙最好增加一些停頓時(shí)間,否則造型切換太快,晃得人眼花,就沒了跳舞的感覺。具體停頓多長(zhǎng)時(shí)間,可以多改幾次數(shù)值,找出你認(rèn)為最優(yōu)的。