内容正文:
贪心算法(二)——寻找最优解
1、(诸暨中学)存储简单几何图形(正方形、长方形和三角形)数据的方法描述如下:
①使用特征数:1表示正方形,2表示长方形,3表示三角形;②正方形只用1个正整数数表示边长、长方形用2个正整数分别表示它的长和宽、三角形用3个正整数表示其三边的边长;③数据的开头一个正整数n(n不超过3000,数字之间用ASCII字符逗号分隔),表示接下来共有n个简单几何图形的信息;所有原始数据都是合理的。如数据4,1,2,3,2,2,3,2,2,3,3,3,4,5,表示共有4个简单几何图形。第一个为正方形,边长为2;第二个为三角形,边长分别为2,2,3;第三个为长方形,长和宽分别为2,3;第四个为三角形,三边长分别为3,4,5
根据上述存储数据,小龙编写了一个VB程序,功能如下:窗体加载时,自动读取数据,依次存储在数组元素a(1)、a(2)、a(3)……中。单击“统计”按钮Command1,程序对数据依次进行分析统计,并在列表框Listl中显示每个简单几何图形是什么形状,其周长是多少,最后在列表框中所有简单几何图形周长的最大值是多少。
(1)数据“10,1,3,2,4,5,3,7,3,5,1,5,2,7,3,3,4,4,3,2,2,3,3,8,5,4,1,6,2,8,9”表示的简单图形中长方形共有 个。
(2)实现上述功能的VB程序如下,请在划线处填入适合的代码。
Dim a(1To 3000)As Integer
Private Sub form_load()
,读取并将简单几何图形的原始数据存储在数组a中,代码略
End Sub
Private Sub Command1_Click() ’读取并存储数据
Dim n As Long,i As Long,k As Long
Dim max As integer,L as integer,p as integer
‘max表示最大周长,L表示正在处理的图形的周长
n= ①
max=0: ②
For i=1 To n
If a(k)=1 Then
L=4*a(k+1)
List1.Addltem"图形”&Str(i)&"是正方形,周长为"&Str(L)
If L>max then max=L:p=k
k=k+2
ElseIf a(k)=2 Then
③
List1.Addltem”图形”&Str(i)&”是长方形,周长为”&Str(L)
If L > max then max=L:p=k
k=k+3
Else
L=a(k+1)+a(k +2)+a(k +3)
Listl.Addltem”图形”&Str(i)&”是三角形,周长为"&Str(L)
If L > max then max=L:p=k
k=k+4
End If
Next i
List1.Addltem”所有简单几何图形中,周长最大值为"&Str(max)
End Sub
2、(金华十校)波波同学一直梦想买彩票中500万大奖,他收集了最近100期“双色球”开奖信息,存储于data.accdb文件中,并使用VB软件编写了“双色球投注建议”程序,程序根据最近100期开奖信息,统计出现概率最低的6个红色球号码和1个蓝色球号码,给出投注建议。如果蓝色球有多个概率最低的号码,则输出多个,红色球不考虑并列概率最低情况。
注:福彩“双色球”玩法:在1-33个红色球号码中随机生成6个号码,在1-16个蓝色球号码中随机生成1个号码,共计6+1个号码开奖。
程序运行界面如下图所示:
(1)实现上述功能的VB程序如下,请完善划线处的代码。
Dim red(1To 600)As Integer用于存储100*6红色球信息
Dim blue(1To100)As Integer用于存储100*1蓝色球信息
Private Sub Form_Load0
本过程用于从数据库data.accdb中读取最近100期双色球开奖信息
将100*6个红色球开奖信息依次存储在数组red0中
将100*1个蓝色球开奖信息依次存储在数组blue0中
将最近100期开奖信息格式化后显示在列表框List1中
本过程代码略
End Sub
Private Sub Command 1_Click()
Dim min As Integer
Dims As string
Dimf(1To 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 fi)<min Then min=f(i)
Next i
For i=1 To 16