永发信息网

vb编程一块钱换成1分,2分5分的硬币,总共60枚,有多少种算法

答案:1  悬赏:60  手机版
解决时间 2021-03-29 10:46
  • 提问者网友:辞取
  • 2021-03-28 21:16
vb编程一块钱换成1分,2分5分的硬币,总共60枚,有多少种算法
最佳答案
  • 五星知识达人网友:冷風如刀
  • 2021-03-28 21:43
这个题可以有两种编程法,下面都介绍一下吧。先要在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
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯