【正文】
婪,而且是每一步都貪婪!下面舉例說明。輸出End Sub(上程序在VB60 Win2000下調(diào)試通過)小結(jié)上面應(yīng)用的推導(dǎo)方法就是倒推法。 Wend x = x + 5 39。 End If符合情況則將整除標(biāo)志加1 s = s * 5 / 4 + 1 For i = 4 To 1 Step 1 39。第5只猴子時(shí)總數(shù) While k 4 k = 0 39。聲明變量(3)源程序Option ExplicitPrivate Sub Form_Click()(2)界面界面非常簡(jiǎn)單,建立一標(biāo)準(zhǔn)EXE工程,其caption設(shè)為“猴子分食桃子”,一切OK。為了做出上面while循環(huán)的結(jié)束條件,還需進(jìn)一步分析上述規(guī)律的特點(diǎn),要符合題目中的要求,s1s4四個(gè)數(shù)必須全部為整數(shù),這個(gè)可作為條件。上面的規(guī)律中只要將s1s5的下標(biāo)去掉:s=xs=s*5/4+1s=s*5/4+1s=s*5/4+1s=s*5/4+1所以可以用循環(huán)語句加以解決。 s2=s3*5/4+11 s4=s5*5/4+13 第N只猴前桃子數(shù)目5如果從第1只開始往第5只找,不好找,但如果思路一變,從第N到第1去,可得出下面的推導(dǎo)式:第N只猴第三只,第四只,第五只猴子都依次如此分食桃子。不過,就在半夜里,一只猴子偷偷起來,把桃子均分成五堆后,發(fā)現(xiàn)還多一個(gè),它吃掉這桃子,并拿走了其中一堆。請(qǐng)看下面的示例。我們要么從前向后(或從小到大)推導(dǎo),也可從后向前(或從大到小)推導(dǎo)。”什么是遞推法遞推法這種解題方法其實(shí)在我們編程的過程中用的很多,只不過沒有將其上升到理論的高度罷了。這些算法當(dāng)中,最最簡(jiǎn)單的莫過于遞推算法了。能不能介紹幾種簡(jiǎn)單的算法,當(dāng)然從最容易懂的那種開始了?”答:“算法就是能夠證明正確的解題步驟,算法有許多種,最簡(jiǎn)單的無非下面的六種:遞推法、貪心法、列舉法、遞歸法、分治法和模擬法。六種常用算法有條不紊——遞推法破解難題問:“我對(duì)數(shù)據(jù)結(jié)構(gòu)有了一定了解,但還是不太懂程序。從經(jīng)典公式“程序=算法+數(shù)據(jù)結(jié)構(gòu)”得知,是因?yàn)椴涣私馑惴?。剛聽名字挺嚇人的,其?shí)有好多程序我們平常都見過。下面舉例說明。所謂遞推法,就是找出和時(shí)間先后相聯(lián)系或和數(shù)的大小相聯(lián)系的步驟,上一步和下一步和數(shù)字的增大或減小有一定的聯(lián)系。由此得出兩種推導(dǎo)方法:順推法和倒推法。示例:猴子分食桃子五只猴子采得一堆桃子,猴子彼此約定隔天早起后再分食。第二只猴子醒來,又把桃子均分成五堆后,還是多了一個(gè),它也吃掉這個(gè)桃子,并拿走了其中一堆。那么桃子數(shù)最少應(yīng)該有幾個(gè)呢?編程簡(jiǎn)析怎樣編程呢?先要找一下第N只猴子和其面前桃子數(shù)的關(guān)系。 s5=x4 s3=s4*5/4+12 s1=s2*5/4+1s1即為所求。綜觀程序的整體結(jié)構(gòu),最外是一個(gè)循環(huán),因?yàn)檠h(huán)次數(shù)不定,可以使用While循環(huán),其結(jié)束條件則是找到第一個(gè)符合條件的數(shù)。具體實(shí)現(xiàn)請(qǐng)參看源程序。語言、界面、源程序(1)語言程序中通過Virual 。我們將代碼加給Form_Click()即窗體的單擊事件,將來運(yùn)行時(shí),我們只要用鼠標(biāo)單擊一下窗體,程序就執(zhí)行了。 Dim x, s, k, i As Integer 39。 x = 6整除標(biāo)志 s = x 39。 k = 0第41只時(shí)的數(shù)量 If Int(s) = s Then 39。 k = k + 1 Next i第次增5 Print s 39。生活中的更多問題采用順推法就可得到,也即從1N,但不論倒推還是順推,能遞推出并解出問題是我們的本意。穩(wěn)扎穩(wěn)打——貪心法破解難題問:“算法除了遞推法,該輪到貪心法了吧,從字面上理解,這種方法有些貪得無厭還是…?”答:“基本算法中的遞推法是我們最常使用的,貪心法是另一種有意思的算法?!笔裁词秦澬姆ㄘ澬姆ň褪亲鲆环N目前最貪婪的行動(dòng),一步步解決問題。示例:刪數(shù)問題鏈