计算机编程:信息学奥赛选拔试题小华有138元9角钱,准备全部购买铅笔,店里有8角,6角,5角,4角一支的铅笔4种,请编写一个程序,在8角一支的铅笔必须购买一支的前提下,使买的铅笔数量最多,而钱
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/03 01:26:24
![计算机编程:信息学奥赛选拔试题小华有138元9角钱,准备全部购买铅笔,店里有8角,6角,5角,4角一支的铅笔4种,请编写一个程序,在8角一支的铅笔必须购买一支的前提下,使买的铅笔数量最多,而钱](/uploads/image/z/11958863-23-3.jpg?t=%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BC%96%E7%A8%8B%EF%BC%9A%E4%BF%A1%E6%81%AF%E5%AD%A6%E5%A5%A5%E8%B5%9B%E9%80%89%E6%8B%94%E8%AF%95%E9%A2%98%E5%B0%8F%E5%8D%8E%E6%9C%89138%E5%85%839%E8%A7%92%E9%92%B1%2C%E5%87%86%E5%A4%87%E5%85%A8%E9%83%A8%E8%B4%AD%E4%B9%B0%E9%93%85%E7%AC%94%2C%E5%BA%97%E9%87%8C%E6%9C%898%E8%A7%92%2C6%E8%A7%92%2C5%E8%A7%92%2C4%E8%A7%92%E4%B8%80%E6%94%AF%E7%9A%84%E9%93%85%E7%AC%944%E7%A7%8D%2C%E8%AF%B7%E7%BC%96%E5%86%99%E4%B8%80%E4%B8%AA%E7%A8%8B%E5%BA%8F%2C%E5%9C%A88%E8%A7%92%E4%B8%80%E6%94%AF%E7%9A%84%E9%93%85%E7%AC%94%E5%BF%85%E9%A1%BB%E8%B4%AD%E4%B9%B0%E4%B8%80%E6%94%AF%E7%9A%84%E5%89%8D%E6%8F%90%E4%B8%8B%2C%E4%BD%BF%E4%B9%B0%E7%9A%84%E9%93%85%E7%AC%94%E6%95%B0%E9%87%8F%E6%9C%80%E5%A4%9A%2C%E8%80%8C%E9%92%B1)
计算机编程:信息学奥赛选拔试题小华有138元9角钱,准备全部购买铅笔,店里有8角,6角,5角,4角一支的铅笔4种,请编写一个程序,在8角一支的铅笔必须购买一支的前提下,使买的铅笔数量最多,而钱
计算机编程:信息学奥赛选拔试题
小华有138元9角钱,准备全部购买铅笔,店里有8角,6角,5角,4角一支的铅笔4种,请编写一个程序,在8角一支的铅笔必须购买一支的前提下,使买的铅笔数量最多,而钱又恰好用完.输出各种铅笔的数量.
计算机编程:信息学奥赛选拔试题小华有138元9角钱,准备全部购买铅笔,店里有8角,6角,5角,4角一支的铅笔4种,请编写一个程序,在8角一支的铅笔必须购买一支的前提下,使买的铅笔数量最多,而钱
c1 = 138 * 10 + 9
Dim n() As Long, s() As String, l As Long, lmax As Long, s_xinxi As String
l = 0
For i1 = 8 To c1 Step 8
For i2 = 0 To c1 Step 6
For i3 = 0 To c1 Step 5
For i4 = 0 To c1 Step 4
If i1 + i2 + i3 + i4 = c1 Then
ReDim Preserve n(l) '记录总数
ReDim Preserve s(l) '记录排列
n(l) = i1 \ 8 + i2 \ 6 + i3 \ 5 + i4 \ 4
s(l) = "8毛:" & i1 \ 8 & "只,6毛:" & i2 \ 6 & "只,5毛:" & i3 \ 5 & "只,4毛:" & i4 \ 4 & "只"
If n(l) > lmax Then lmax = n(l)
l = l + 1
End If
Next
Next
Form1.Caption = "排列数" & l & "---最多铅笔数" & lmax & "----计算进度" & Format(i1 * 100 / c1, "00.0") & "%"
DoEvents
Next
Next
s_xinxi = ""
For i = 0 To lmax - 1
If n(i) = lmax Then
s_xinxi = s_xinxi & s(i) & vbCrLf
End If
Next
MsgBox s_xinxi
'优化代码
c1 = 138 * 10 + 9 '钱数随便写 单位毛
Dim s() As String, l As Long, lmax As Long, s_xinxi As String
l = 0
lmax = (c1 - 8) \ 4 + 1
For i1 = 8 To c1 Step 8
For i2 = 0 To c1 Step 6
For i3 = 0 To c1 Step 5
i4 = c1 - i1 - i2 - i3
If i4 Mod 4 = 0 Then
If i1 + i2 + i3 + i4 = c1 And i1 \ 8 + i2 \ 6 + i3 \ 5 + i4 \ 4 = lmax Then
ReDim Preserve s(l) '记录排列
s(l) = "8毛:" & i1 \ 8 & "只,6毛:" & i2 \ 6 & "只,5毛:" & i3 \ 5 & "只,4毛:" & i4 \ 4 & "只"
l = l + 1
End If
End If
If i1 \ 8 + i2 \ 6 + i3 \ 5 + (c1 - i1 - i2 - i3) \ 4 < lmax Then Exit For
Next
If i1 \ 8 + i2 \ 6 + (c1 - i1 - i2) \ 4 < lmax Then Exit For
Next
If i1 \ 8 + (c1 - i1) \ 4 < lmax Then Exit For
Next
s_xinxi = ""
For i = 0 To l - 1
s_xinxi = s_xinxi & s(i) & vbCrLf
Next
MsgBox s_xinxi