友情提示:380元/半年,儿童学编程,就上码丁实验室。
VB代码:(2018年9月金华十校)17.【加试题】波波同学一直梦想买彩票中 500 万大奖,他收集了最近 100 期“双色球”开奖信息, 存储于 data.accdb 文件中,并使用 VB 软件编写了“双色球投注建议”程序,程序根据最近 100 期开奖信息,统计出现概率最低的 6 个红色球号码和 1 个蓝色球号码,给出投注建议。如果蓝色球有多个概率最低的号码,则输出多个,红色球不考虑并列概率最低情况。
注:福彩“双色球”玩法:在 1-33 个红色球号码中随机生成 6 个号码,在 1-16 个蓝色球号码中随机生成 1 个号码,共计 6+1 个号码开奖。
程序运行界面如下图所示:
(1) 实现上述功能的 VB 程序如下,请完善划线处的代码。
Dim red(1 To 600) As Integer ‘ 用于存储 100*6 红色球信息
Dim blue(1 To 100) As Integer ‘ 用于存储 100*1 蓝色球信息
Private Sub FormLoad()
‘ 本过程用于从数据库 data.accdb 中读取最近 100 期双色球开奖信息
‘ 将 1006 个红色球开奖信息依次存储在数组 red()中
‘ 将 1001 个蓝色球开奖信息依次存储在数组 blue()中
‘ 将最近 100 期开奖信息格式化后显示在列表框 List1 中
‘ 本过程代码略
End Sub
Private Sub Command1_Click()
Dim min As Integer
Dim s As string
Dim f(1 To 33) As Integer
‘ ———-以下开始处理蓝色球部分————-
For b = 1 To 100
f(blue(b)) = f(blue(b)) + 1
Next b
min = 100
For i = 1 To 16
If f(i) < min Then min = f(i)
Next i
For i = 1 To 16
If f(i) = min Then s = ①
f(i) = 0
Next i
List2.AddItem “蓝色球重点买入:” + s
‘ ———-以下开始处理红色球部分————-
For r = 1 To 600
②
Next r
③
For i = 1 To 6 ‘ 查找概率最低的 6 个红球数字
k = 1
For j = 2 To 33
If f(j) < f(k) Then k = j
Next j
s = s + Str(k)
f(k) = 100
Next i
List2.AddItem “红色球重点买入:” + s ‘第(2)题 红球购买建议
End Sub
(2) 在某次红球部分处理时,若数组 f 中的,f(1)至 f(33)的值依次为:
f( 1)-f(11): 6 8 20 25 16 21 14 20 24 28 26
f(12)-f(22): 1 30 8 1 10 10 33 28 32 20 6
f(23)-f(33): 4 34 29 18 25 30 4 13 30 20 6
结合加虚线框处代码的算法,输出的内容是红色球重点买入:
(按输出顺序写出 6 个红球号码)。参考答案:(1)①s+str(i)
②f(red(r))=f(red(r))+1
③s=’’
(2)12 15 23 29 1 22
解析:
(1) ①f()数组用于统计100次中1-16号蓝球各自出现的次数,如果f(i)=min,此时下标i则为出现频率最低的蓝球的号码,需要将出现次数最低的所有标号均输出。
②参照蓝球处理部分。
③红球的标号同样用s存储与输出,故先要清空。
(2)f()数组中的数据为1-33号红球各自出现的次数,通过选择排序,每次将出现次数最少的标号输出,并将其对应的f(k)的值设为100,防止被下一次又选中。直到输出6个号码为止。
处理红色球部分的python代码如下:
s=”
f=[0,6,8,20,25,16,21,14,20,24,28,26,
1,30,8,1,10,10,33,28,32,20,6,
4,34,29,18,25,30,4,13,30,20,6]
for i in range(1,7):
k=1
for j in range(2,34):
if f[j]<f[k]:
k=j
s=s+str(k)+’ ‘
f[k]=100
print(‘红色球重点买入:’+s)
python代码运行结果如下: