小明为班会活动的“抽奖环节”设计了一张获奖表。该“抽奖环节”功能如下:班级学生人数为n个,程序运行后,单击“发放号码牌”按钮Command1,随机生成n个不重复的[n+1, 2*n]内的整数,并在列表框list1中显示,学生按学号次序依次领取号码牌,例如:随机生成的第一个整数为54,则学号为1号的学生领取的号码牌为54。单击“抽奖”按钮Command2,在列表框list2中显示获奖表,获奖序列要求:第1名获奖的学生是号码牌数字中偶数最大的,第2名获奖的学生是号码牌数字中奇数最小的,第3名获奖的学生是号码牌数字中偶数第二大的,第4名获奖的学生是号码牌数字中奇数第二小的……取过的数字不能再取,以此类推,直到结束。其程序界面如图所示。
实现上述功能的VB程序代码如下,请回答以下问题:
Const n = 50
Dim a(1 To n) As Integer
Dim f(n + 1 To 2 * n) As Boolean
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Randomize
For i = n + 1 To 2 * n
f(i) = False
Next i
For j = 1 To n
a(j) = Int(Rnd * n) + n + 1
If f(a(j)) = True Then j = j - 1 Else ①
Next j
For i = 1 To n
List1.AddItem CStr(i) + "号-" + CStr(a(i)) 'cstr 把数值类型转换为字符串类型,并去前导空格
Next i
End Sub
Private Sub Command2_Click()
Dim i As Integer, j As Integer, m1 As Integer, m2 As Integer
m1 = 0: m2 = n \ 2
For i = n + 1 To 2 * n
If ② Then
m1 = m1 + 1: a(m1) = i
Else
m2 = m2 + 1: a(m2) = i
End If
Next i
For j = 1 To n \ 2
List2.AddItem "第" + CStr(2 * j - 1) + "名" + Str( ③ ) List2.AddItem "第" + CStr(2 * j) + "名" + Str(a(n \ 2 + j))
Next j
End Sub
(1)
若仅对如下号码牌进行抽奖:1号-57,2号-76,3号-91,4号-83,5号-66,6号-82,则第3名获奖的学生学号是号。
(2)
请在划线处填写合适代码,使程序正常运行。
① ② ③
答案: 【1】2
【1】f(a(j)) = True【2】iMod2=0【3】a(n\2-j+ 1)