“7只鴿子飛回3個(gè)鴿巢中,不管怎么樣放,總有一個(gè)鴿巢里至少有三只鴿子”這反應(yīng)了數(shù)學(xué)組合中的一個(gè)基本原理,稱為鴿巢原理(或者是抽屜原理),由德國(guó)數(shù)學(xué)家狄利克雷提出。鴿巢問(wèn)題常見(jiàn)題型就是將3個(gè)蘋(píng)果放入兩個(gè)抽屜里面,無(wú)論怎么放置,肯定有一個(gè)抽屜里有兩個(gè)或者兩個(gè)以上的蘋(píng)果。今天我們就用Scratch來(lái)解決這個(gè)數(shù)學(xué)問(wèn)題。
首先確定鴿巢和鴿子的數(shù)量,在輸入正確的數(shù)量之后,舞臺(tái)上顯示對(duì)應(yīng)數(shù)量的鴿巢和鴿子圖片。系統(tǒng)會(huì)自動(dòng)根據(jù)鴿巢原理形成一個(gè)將每個(gè)鴿子關(guān)進(jìn)不同鴿巢的動(dòng)畫(huà)效果。并給出最終的答案,且顯示解題思路(圖1)。
新建三個(gè)變量:鴿巢數(shù)量、鴿子數(shù)量以及答案。創(chuàng)建人物角色德溫對(duì)鴿巢問(wèn)題進(jìn)行解說(shuō),德溫會(huì)詢問(wèn)一共有幾個(gè)鴿巢和多少只鴿子。界面中會(huì)根據(jù)輸入的數(shù)量顯示出鴿巢和鴿子。根據(jù)用戶給出的數(shù)量說(shuō)出要解決的問(wèn)題:多少個(gè)鴿巢飛進(jìn)了多少只鴿子,那么一個(gè)鴿巢中至少飛進(jìn)了幾只鴿子呢?使用鴿子的總數(shù)÷鴿巢個(gè)數(shù)=商……余數(shù)。答案=商+1。答案的最后附加上解題思路(圖2)。
當(dāng)用戶在輸入框中輸入正確的鴿巢數(shù)量之后,會(huì)廣播“顯示鴿巢”并等待。鴿巢角色收到這條廣播后,會(huì)顯示并根據(jù)輸入數(shù)量減一克隆自身,這樣舞臺(tái)上算上本體數(shù)量就與要求一致了。在克隆時(shí)X軸增加60,等待0.5秒。表現(xiàn)出復(fù)制鴿巢的動(dòng)畫(huà)效果(圖3)。
鴿子受廣播控制表現(xiàn)兩段動(dòng)畫(huà),出現(xiàn)和進(jìn)入鴿巢。收到“顯示鴿子”時(shí)用鴿巢同樣的克隆方法顯示出來(lái)(圖4)。
當(dāng)收到“動(dòng)畫(huà)演示”后,將所有的鴿子全部隱藏,移動(dòng)到第一個(gè)鴿巢位置中顯示,每個(gè)鴿巢先進(jìn)入一只鴿子,第一排位置占滿后從第二排繼續(xù)進(jìn)入,第二次重復(fù)執(zhí)行語(yǔ)句的次數(shù)為鴿子數(shù)-鴿巢數(shù)-1。直至所有的鴿子全部收入鴿巢中結(jié)束(圖5)。
如何求出每個(gè)鴿巢中可以裝入多少只鴿子呢?只需要按照鴿子的數(shù)量除以鴿巢的數(shù)量的商進(jìn)行向上取整。如果僅僅用簡(jiǎn)單的數(shù)學(xué)知識(shí)來(lái)完成鴿巢問(wèn)題其實(shí)是比較簡(jiǎn)單的,當(dāng)使用Scratch動(dòng)畫(huà)模擬推導(dǎo)過(guò)程,就需要多方考慮變量和循環(huán)的變化以及角色圖形的限制,保證動(dòng)畫(huà)效果的完美。