题目

小炫报名参加“智力大冲浪”节目。比赛规则如下: 比赛开始时参赛者将预先得到M元奖金。 比赛时间分为N个时间段(N≤100),有N个小游戏,每个时间段可完成1个游戏,第i个小游戏必须在规定期限t(i)时段前完成(1≤t(i)≤N),否则要从奖金M元中扣去奖金w(i),w(i)为自然数,不同的游戏扣去的奖金是不一样的。每个游戏必须从整时段开始。注意:比赛绝对不会让参赛者赔钱! 例如:当N=5,M=100时, 游戏编号 1 2 3 4 5 完成期限t(i) 1 4 2 3 2 扣除奖金数w(i) 5 4 10 8 7 在这种情况下,小炫依次完成编号为5、3、4、2、1的小游戏,获得了最高奖金95元。 他的算法思想:让扣款高的游戏尽量准时完成,扣除的奖金越少,则最后赢取的奖金越多。 1)按扣款数值从大到小排序,在样例中,排序后游戏编号依次为3、4、5、1、2; 2)对于游戏i,在时间段1到t(i)完成,效果都是一样的,所以尽量放置的时间段t(i)完成,若该时段已经被占用,则依次考察时间段t(i)-1,t(i)-2,……,1。在样例中, ①考虑游戏3,放置在时间段2完成(注:t(3)=2); ②考虑游戏4,放置在时间段3完成(注:t(4)=3); ③考虑游戏5,时间段2已被游戏3占用,放置在时间段1完成(注:t(5)-1=1); ④考虑游戏1,时间段1已被游戏5占用,不能按时完成,放到时间段5; ⑤考虑游戏2,放置在时间段4完成(注:t(2)=4)。 小炫按如上算法编写了一个VB程序,计算“智力大冲浪”游戏中玩家最多可赢取的奖金,将结果输出到文本框Text1中。 VB程序代码如下所示,请在划线处填入合适代码。 Dim n As Integer, m As Integer Dim t (1 To 100)As Integer     '变量t(i)表示第i个游戏的完成期限 Dim w (1 To 100) As Integer    '变量w(i)表示第i个游戏未完成要扣除的奖金 Dim f (1 To 100)As Boolean     '变量f(i)表示第i个时段是否已经被占用 Private Sub Form_ Load()     '初始化游戏设置信息,时段数量n、初始奖金数m、数组t、数组w     '代码略 End Sub Sub swap(x As Integer, y As Integer)    '自定义过程,可以用Call语句来调用该过程     Dim z As Integer     z=x:x=y:y=z End Sub Sub sort()     '自定义过程,可以用Call语句来调用该过程     Dim x As Integer, i As Integer, j As Integer     For i=1 To n-1         For j=i+1 To n             If w(i)< w(j) Then                 Call swap(w(i), w(j))     '调用自定义过程                              End if         Next j     Next i End Sub Private Sub Command1_Click()     Dim i As Integer, k As Integer, p As Integer     Call sort      '调用自定义过程     tot=0     For i=1 To n         f(i)= True     Next i     For i=1 To n     '对每个游戏从该游戏的规定期限开始往左找可用时间段         '找到则完成该游戏,否则放弃该游戏         p=-1         k=t(i)         Do While k >0 And p=-1             If f(k)= True Then                 p=k                 f(k)= False             Else                              End if         Loop         If p=-1 Then tot=tot +w(i)     Next i         Text1. text= str(ans) End Sub 答案:【1】call swap(t(i),t(j))【2】k=k-1【3】ans=m- tot
信息技术 试题推荐
最近更新