一个厨师收集了n道菜的满意程度,这个厨师做出每道菜的时间都是1单位时间。一道菜的喜爱时间为烹饪这道菜以及之前每道菜所花费的时间总和乘以这道菜的满意程度。现在你可以按任意顺序安排做菜的顺序,也可以选择放弃做某些菜来获得更大的喜爱时间总和。如:输入n道菜的满意程度“-1,-8,0,5,-9”,先将满意程度降序排列再通过计算,最大的喜爱时间总和为(-1*1+0*2+5*3=14)
5
0
-1
-8
-9
喜爱时间总和
1道菜
1
5
2道菜
2
1
10
3道菜
3
2
1
14
4道菜
4
3
2
1
10
5道菜
5
4
3
2
1
-3
编写VB程序,实现上述功能。运行程序,在文本框Text1中输入n道菜的满意程度后(数据之间以逗号隔开),单击“计算”按钮Commandl,在标签Labell中显示,最后在标签Label1中显示做完所有菜「喜爱时间」总和的最大值。程序运行界面如图所示。
请回答下列问题:
(1)
若文本框中显示的内容为“-2,5,-4,0,3,-3",则做完所有菜[喜爱时间」总和的最大值为。(填数字)
(2)
实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_ Click()
Dim xa As Integer, c As String
c = Text1. Text
Label1. Caption =“做完所有菜的「 喜爱时间」总和的最大值为”+ Str (xa)
End Sub
Function xiai(x As String) As Integer
Dim m(8) As Integer, i As Integer, j As Integer, k As Integer, sum As Integer
Dim ch As String
max= 0 : k=0
j =1
For i=1 To Len(x)
ch = Mid(x, i, 1)
If ch ="," Then
k=k+1
m(k) = Val(Mid(x, j, i - j))
j=i+1
End If
Next i
For i=1 To k
For j=k+1 To i+1 Step-1
If m(j)>m(j-1) Then
t = m(j): m(j) = m(j - 1): m(j-1)= t
End If
Next j
Next i
For i=1 To k+1
If m(i) > 0 Then
sum = sum + m(i)
End If
Next i
xiai = sum
End Function
答案: 【1】30
【1】xa=xiai(c)【2】m(k+1)= Va(Mid(x, j, i- i))【3】m(i)=m(i) + m(i- 1)