16. 求最大连续子序列和。给出一个序列,序列元素有正整数、0、负整数,要求找到序列中的一个连续子序列,使得这个子序列中包含的所有元素之和最大,在和最大的前提下还要求该子序列包含的元素个数最多,输出这个最大和以及该连续子序列中的元素个数、连续子序列中各个元素。例如序列-5,4,-14,2,-1,0,9,-4,3,最大连续子序列和为17,该连续子序列中的元素个数为7,该连续子序列为4,-1,4,2,-1,0,9。
算法描述如下:
(1)从第一个数开始向后进行累加,每次累加和若大于之前的最大和,则记录此时的最大和与连续子序列的长度、最后一个序列元素位置;
(2)若每次累加和等于之前的最大和但大于之前的最大长度,则记录此连续子序列的长度、最后一个序列元素位置;
(3)若累加和小于0,则重新开始记录;
(4)若有符合条件的多个连续子序列,则输出最先找到的连续子序列小明编写了一个实现该功能的VB程序,窗体加载时,读取n个序列数据,依次存储在数组a,并显示在文本框Text1中,单击“计算”按钮 Command1后,找出累加和最大的子序列,在标签 Label2上显示最大连续子序列的和,在Label3上显示该连续子序列的元素个数,在 Labele4上显示该连续子序列。程序运行界面如图所示。
(1)序列“1,2,2,-5,0,7,8,-7,-1,9”的最大连续子序列和为
________ 。
(2)请在画线处填入合适的代码。
Const n = 10
Dim a(l To n) As Integer
Private Sub Form_ Load()
读取数据,依次存储到数组a中,并在文本框Text1中输出。代码略
End Sub
Private Sub Command l Click()
Dim i As Integer, k As Integer, sum As Integer
Dim lenth As Integer, temp As Integer, begin As Integer
temp =0:sum =0
lenth =0:begin =0
For i=1 To n
If temp + a(i)> sum Then
sum= temp t a(i)
lenth = i - begin
k = i
Else If temp +a(i)= sum And ____Then
lenth = i- begin
k=i
End if
If temp+a(i)<0 Then
______
temp = 0
Else
______
End If
Next i
S=" "
For i = k - lenth +1 To k
s =s + ads(a(i), 3)
Next i
Label2. Caption="最大连续子序列和为:"+ Str(sum)
Label3. Caption="该连续子序列中的元素个数为:"+Str( lenth)
Label4. Caption="最大连续子序列为:"+s
End Sub
Function ads(x As Integer, n As Integer) As. String
整数转换成长度固定的字符串。代码略
End Function