硬幣演算法
『壹』 用1分,2分和5分硬幣湊成一元錢的方法有多少種
不知道有沒有限制一定要有這3種硬幣呢?如果這三種硬幣必須至少用一枚的話,演算法如下:
設x個1分,y個2分,z個5分,且xyz都是正自然數
x+2y+5z=100
19>=z>=1
z=1時 x+2y=95 x>=1,且x是奇數;2y<=94,且y是整數,所以有47種
z=2時 x+2y=90 1<=y<=44 同理,有44種
z=3時 x+2y=85 1<=y<=42 同理,有42種
z=4時 x+2y=80 1<=y<=39 同理,有39種
z=5時 x+2y=75 1<=y<=37 同理,有37種
……
這個方法好笨,要算19次……不過我暫時想不出更好的方法
但有個規律就是個數依次-3,-2,-3,-2,-3……
『貳』 vb編程一塊錢換成1分,2分5分的硬幣,總共60枚,有多少種演算法
這個題可以有兩種編程法,下面都介紹一下吧。先要在Form中放一個按鈕和一個文本框,點擊按鈕後,運行結果以文本形式顯示在文本框中。 方法一、用三重循環,分別用1分、2分、5分的硬幣數去嘗試組合,遍歷所有組合,找出滿足要求的組合,保存州空起來。這是比較笨的一種方法,程序運行效率很低。程序如下: Private Sub Command1_Click() Dim Cnt_1, Cnt_2, Cnt_5 As Integer 『 分別表示1分、2分和5分硬幣的數量 Dim Cnt_All As Integer ' 用於統計滿足要求的組合總數 Dim Result(60) As String ' 以文本形式保存的組合方案,分別列明組合中各硬幣的數量。因為硬幣總數是60枚,所以最多不會超過60種演算法。 Cnt_All = 0 Text1.Text = "" For Cnt_1 = 0 To 60 ' 1分硬幣最多隻能有60枚,因為總數就是60枚 For Cnt_2 = 0 To 50 ' 2分硬幣最多隻能有50枚,1元只有100分 For Cnt_5 = 0 To 20 ' 5分硬幣最多隻能有20枚,1元只有100分 If Cnt_1 + 2 * Cnt_2 + 5 * Cnt_5 = 100 And Cnt_1 + Cnt_2 + Cnt_5 = 60 Then Result(Cnt_All) = "1分硬幣" & Cnt_1 & "枚;2分硬幣" & Cnt_2 & "枚;5分硬幣" & Cnt_5 & "枚。" Text1.Text = Text1.Text & Result(Cnt_All) & vbCrLf Cnt_All = Cnt_All + 1 End If Next Cnt_5 Next Cnt_2 Next Cnt_1 Text1.Text = Text1.Text & vbcrlf & "總共有" & Cnt_All - 1 & "種組合演算法。" End Sub 方法二、先分析問題,尋找簡單演算法:設需要1分、2分、5分的硬幣數量分別為X、Y、Z,根據題目要求得到兩個方程:X + Y + Z = 60,1*X + 2*Y + 5*Z = 100,解此三元方程組森喊得:Y = 40 - 4*Z,X = 20 + 3*Z。顯然,X、Y、Z都不可能是負數,由Y=40-4*Z可知,Z的最大值就是10,即只需要循環11次即可找出全部演算法。顯然,這種方法程序簡此跡野單、循環次數少,運行效率高、速度快。程序如下: Private Sub Command1_Click() Dim Cnt_5 As Integer 『 表示5分硬幣的數量,對應方程中的Z Dim Cnt_All As Integer ' 用於統計滿足要求的組合總數 Dim Result(11) As String ' 以文本形式保存的組合方案,分別列明組合中各硬幣的數量。Z最大是10,可知演算法只有11種。 Cnt_All = 0 Text1.Text = "" For Cnt_5 = 0 To 20 Cnt_1 = 20 + 3 * Cnt_5 Cnt_2 = 40 - 4 * Cnt_5 Result(Cnt_All) = "1分的硬幣" & 20 + 3 * Cnt_5 & "枚;2分的硬幣" & 40 - 4 * Cnt_5 & "枚; 5分的硬幣" & Cnt_5 & "枚。" Text1.Text = Text1.Text & Result(Cnt_All) & vbCrLf Cnt_All = Cnt_All + 1 Next Cnt_5 Text1.Text = Text1.Text & vbcrlf & "總共有" & Cnt_All - 1 & "種組合演算法。" End Sub
『叄』 從三個硬幣ABC中取出兩個來,可以有多少種方法
一手抓有AB,BC和CA三種。BA,CB和AC屬於重復情況。演算法是3X2/2=3. 一個一個取,有AB,BA,BC,CB,AC和CA六種。演算法是3X2=6. 拿了還放回去有AA,BB,CC,AB,BA,BC,CB,AC和CA有九種。演算法是3X3=9.