题目

对n项(n<=100)数据序列的前x项求和,可设计如下算法:将数据序列存储在数组a中,并按一定规则转换成数组c,再借助数组c实现求和. 将数组a转换成数组c的方法描述如下: ①将数组a中的元素依次存储到数组c中,把当前数组c看作第一层; ②把第一层中的各元素进行如下处理:奇数项值不变,偶数项的值更新为自己与自己前一项的和,将更新后的数组元素看作第二层; ③把第二层中的各元素,按上述方法进行同样操作,更新后的数组元素看作第三层; ④以此类推,直到当前层中仅有一项为止。 例如x=11时,转换过程如图所示: 借助数组c,可快速计算出数组a中前x项的和.例如,数组a中前11项的和,可由表达式c(11)+c(10)+c(8)得到.表达式具体分析过程如下: ②表达式第一项为c(11); ②将下标11转换成二进制数1011,计算该二进制数最右边的“1”所对应的权值,再用11减去此权值得到10,即表达式第二项为c(10); ③按上述方法继续操作,直到计算结果等于0为止。 小龙依据上述方法设计了如下vb程序.请回答下列问题: (1) 计算数组a中前22项和的表达式为(填写表达式,如c(11)+c(10)+c(8))。 (2) 请在划线处填入合适的代码。 Dim n As Integer Dim a(1 To 1000) As Long, c(1 To 1000) As Long Private Sub Form_Load() '读取n个数据,并存储到数组a中(代码略) End Sub Private Sub Command1_Click() Dim i As Integer, j As Integer, k As Integer, space As Integer For i = 1 To n c(i) = a(i) Next i k = 2 '当前层第一个偶数项的位置 space = 1 '当前层偶数项与前一项的间距 Do While k <= n For i = k To n Step k c(i) = c(i) + c(i - space) Next i k = k * 2 ① Loop End Sub Private Sub Command2_Click() Dim x As Integer, sum As Long x = Val(Text1.Text): sum = 0 Do While x <> 0 sum = sum + c(x) ② Loop Text2.Text = Str(sum) End Sub Function lowbit(x As Integer) As Integer Dim temp As Integer temp = x: lowbit = 1 Do While ③' lowbit = lowbit * 2 temp = temp \ 2 Loop End Function 答案: 【1】c(22)+c(20)+C(16) 【1】space = space * 2【2】x = x- lowbit(x)【3】temp Mod2 = 0
信息技术 试题推荐
最近更新