往池中倒入一定的水量V (每1单位水量刚好填充一个格子, 格子大小为1×1),现要求倒入水后,每一列水位高度一致。
如图b所示,往池中倒入V=11的水量,则水位高度为3.5(解释:第一层没有空白单位,首先填满第2层的3个单位,然后填满第3层的5个单位,此时还剩氽11-3-5-3个单位的水量,第4层有6个单位的空白,不足以填满,此时3/6=0.5,故总填充高度为3+0.5=3.5)。
为了解决该问题,小吴设计了二分算法:通过枚举水位高度,计算所儒的水量与实际输入水量比较,如果所需水量大于实际水量(精确到0.01),则需降低水位高度,否则增加水位高度,直到得到正确结果。程序功能:运行程序时,在文本框Text1中输入倒入的水量V,在文本框Text2中输出能达到的水位高度(保留1位小数输出)。程序运行界面如图c所示。
程序代码如下:
Dim V As Double
Dim a(1 To 100)As Integer, n As Integer
Private Sub Form_Load() ‘初始化池底
n=8
a(1) = 2:a(2) = 1: a(3) = 4: a(4) = 2
a(5)= 1:a(6) = 3: a(7) = 1: a(8) = 4
End Sub
Function check(g As Double) As Boolean
Dim sum As Double ‘变量sum用于计算水位高度为g时所儒水量
Sum = 0
For i = 1 To n
If g > a(i) Then 【sum = sum + g】
Next i
If sum < V Then check = True Else check = False
End Function
Private Sub Command1_ Click()
Dim L AS Double, R As Double, mid As Double
L= 0:R = 32767
V = Val(Text1.Text)
Do While L + 0.001 < R
mid=(L + R)/ 2
If Then
R= mid
Else
L =
End If
Loop
Text2.Text = “高度为:”+ Str(Int(R * 100 + 0.5) / 100)
End Sub