陳新龍
在輔導(dǎo)學(xué)生競賽的時(shí)候看到一道比較有意思的題目:小明打算在“十一”假期騎摩托車自駕游。摩托車每次加滿油后可以行駛100公里。小明在自家附近的加油站加滿油就上路了,上路之后還要順序經(jīng)過“1號-6號”六個(gè)加油站,每個(gè)加油站到上一個(gè)加油站距離分別為50、80、39、60、40、32公里。由于“十一”期間加油站有很多車要加油,所以小明希望盡量減少加油次數(shù)同時(shí)順利到達(dá)目的地。那么請問小明需要在哪些加油站??考佑?,才能使得沿途加油次數(shù)最少呢?
因?yàn)槿绻ν熊囀O碌挠筒粔蛐旭偟较乱粋€(gè)加油站時(shí),就必須要在這個(gè)加油站加油。結(jié)合Scratch編程思想一起來解決這道有趣的奧數(shù)題吧。
首先需要?jiǎng)?chuàng)建兩個(gè)列表。列表“距離”用來存放各個(gè)加油站之間的距離數(shù)值,將50、80、39、60、40、32公里數(shù)添加入列表中。
列表“停靠”存放六個(gè)元素,用于標(biāo)記在哪個(gè)加油站??考佑?,默認(rèn)“??俊绷斜碇辛鶄€(gè)元素初始值為0。當(dāng)??磕硞€(gè)站點(diǎn)時(shí)將對應(yīng)值從0修改為1代表??看说丶佑?。
根據(jù)題目的要求小明不必在所有站點(diǎn)加油。例如小明在第一個(gè)加油站加油,因?yàn)槌霭l(fā)時(shí)油箱是滿的,可以行駛100公里,到達(dá)第一個(gè)目的地的時(shí)候,只能行駛50公里了,因?yàn)榫嚯x第二個(gè)加油站還有80公里,所以必須將油箱加滿才能繼續(xù)前行……
使用當(dāng)油箱的油滿足到下一個(gè)加油站時(shí)就不加油的邏輯,計(jì)算出小明??考佑偷暮侠矸桨?,使得加油次數(shù)最少。
新增加兩個(gè)變量“剩余油量”(統(tǒng)計(jì)當(dāng)前還可以行駛公里數(shù),初始值為100)和變量“i”(列表中的序號,也可以理解成第幾個(gè)加油站,初始值為0)。
重復(fù)循環(huán)執(zhí)行6次(列表“距離”的項(xiàng)目數(shù))提取出“距離”列表中每一項(xiàng)的數(shù)值進(jìn)行比較,如果“距離”列表中的任何一項(xiàng)的數(shù)字超出了100,那么彈出提示“距離加油站超過100千米,摩托車無法正常行駛此路程”并且停止全部腳本。
如果剩余的油量小于“距離”列表中當(dāng)前的項(xiàng)數(shù)時(shí),需要小明在第i號加油站??考佑?,并且在“??俊绷斜碇羞M(jìn)行對應(yīng)標(biāo)記(對應(yīng)初始值從0變?yōu)?),將剩余油量重新設(shè)置為100,表示在此加油站將油加滿。
在行駛的過程中需要注意兩點(diǎn):剩余的油量是不斷地減少的(當(dāng)前剩余油量值減去距離的第i+1項(xiàng)的值),序號i是不斷地增加的(每次增加1),直至到達(dá)最終目的地(圖1)。
最終小明需要在1號、2號、4號加油站??考佑停拍茼樌竭_(dá)最終的目的地。
簡單的奧數(shù)題目結(jié)合有趣的Scratch編程摩擦出了不一樣的火花,那么聰明的你是否解答出正確答案了呢(圖2)?