抢红包游戏:微信抢红包游戏成为了一代人的经典回忆,游戏将总金额为n的“红包”随机分配给m个玩家,红包的分配需同时满足以下规则:①所有人抢到的金额总和跟总金额n相等;②每个人至少抢到1分钱;③每个人抢到的金额随机;④每个人抢到金额大小的概率平等。
满足以上规则的最简单算法可描述为:假设总金额为n元,为使问题简单化,我们将总金额乘以100,此时的单位为分,使得问题在整数范围内解决。假设分发给m个人,则我们只需在[1,100n- 1]长度的范围内随机生成m-1个不重复的点,这些点将长为100n的线段划分为m个段,每一段长度即可表示红包金额,再将每一段长度数据除以100换算为单位元输出。
编程实现:分别在文本框Text1 和Text2中输人总金额n和总人数m,点击“抢红包”按En钮commandl,在列表框Listl中输出抢红包结果,并输出“手气最佳”数据。程序运行界面如下图所示。实现上述算法的VB程序如下,回答以下问题:
(1)
为使程序开始运行时,窗体标题自动更改为“趣味抢红包”,则可在(单选,填字母:(A .Command1_ Click()/ B .Form_ Load()/C .Form1. Load())事件处理过程中添加语句Forml. Caption=“趣味抢红包”。
(2)
请将划线处的代码补充完整。
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
(3)
方框处的代码有误,请改正。
(4)
虚线框内的代码实现的功能是。
答案: 【1】B
【1】f(n)=True【2】red=i-begin+1或其它等 价表达式
begin= i+1
【1】随机数去重