由数组a生成数组b的方法描述如下:
⑴将数组a中的n个元素依次分割出若干个数据块,每个数据块有2m个元素,分割时,按尽可能大的数据块进行分割。
⑵对每个分割出的数据块进行求和,将和依次存储在数组b中。
例如:n=13,可将a(1)~a(13)依次分割成3个数据块,元素的个数分别为8、4、1。将3个数据块的和依次存储在b(1)、b(2)、b(3)中。
小明依据上述描述设计了如下VB程序,运行界面如图所示。请回答下列问题:
Const n = 13 Dim a(1 To n) As Integer Dim b(1 To n) As Integer Private Sub Command1_Click() Dim start As Integer ‘当前未分割数据的第1个元素下标 Dim i As Integer, k As Integer, pb As Integer, left As Integer, m As Integer '读取n个数据,依次存储到a(1)、a(2)、……a(n)中,并对数组b赋初值为 0,代码略 start = 1: left = n: m = 0 Do While 2 ^ m <= left ‘寻找第1个数据块 ① Loop m = m - 1 pb = 1 Do While left > 0 For i = start To start + 2 ^ m - 1 ② Next i List1.AddItem Str(2^m) + " " + Str(b(pb)) pb = pb + 1 ‘改错 left = left - 2 ^ m Do While left < 2 ^ m m = m - 1 Loop Loop End Sub
(1)
当 n=110时,分割出的数据块有 个。
(2)
程序代码中,将划线处语句补充完整。
① ②
(3)
程序代码中,加框处语句有错,请改正。
答案: 【1】5
【1】m = m + 1【2】b(pb) = b(pb) + a(i)
start = i 或 start = start + 2 ^ m