满足以上规则的最简单算法可描述为:假设总金额为n元,为使问题简单化,我们将总金额乘以100,此时的单位为分,使得问题在整数范围内解决。假设分发给m个人,则我们只需在[1,100n- 1]长度的范围内随机生成m-1个不重复的点,这些点将长为100n的线段划分为m个段,每一段长度即可表示红包金额,再将每一段长度数据除以100换算为单位元输出。
编程实现:分别在文本框Text1 和Text2中输人总金额n和总人数m,点击“抢红包”按En钮commandl,在列表框Listl中输出抢红包结果,并输出“手气最佳”数据。程序运行界面如下图所示。实现上述算法的VB程序如下,回答以下问题:
Private Sub Command1_ Click()
Dim n As Integer, m As Integer
Dim f(1 To 32767) As Boolean
n= Int(Val(Text1.Text) * 100)
m= Val(Text2.Text)
If m> n Then
List1.AddItem "游戏无法继续,结束!"
Else
Randomize
For i=1 To m- 1
t= Int(Rnd * (n-1))+1
f(t)= True
Next i
begin= 1
Max=0
For i=1 To n
If f(i) Then
If red > Max Then Max= red
'改错
List1.AddItem Str(red / 100)
End If
Next i
List1.AddItem "手气最佳:"+Str(Max / 100)
End If
End Sub