题目

数塔问题。一组数字构成如图a所示的数塔,从数塔顶层出发,每个结点可以选择移动至左下方或右下方结点,一直走到塔底为1条路径。求从数塔顶层到塔底各条路径上数字和的最大值。 解决此问题可采用自底至顶分析的方法。如图a所示的数塔中,先从第3层开始分析:如果路径经过第3层的第1个数字12,那么从12到尾结点的路径上数字之和的最大值是当前结点值加上该结点左下方、右下方结点中的较大值,记作f(3,1)=12+141同理,f(3,2)=7+15、f(3,3)=26+15:再分析第2层,计算f(2,1)、f(2,2):最后计算出第1层f(1,1),即为所求结果。 (1) 如图a所示数塔各条路径上的数字和的最大值为。 (2) 编写VB程序,运行界面如图b所示,程序代码如下,请在划线处填入合适的代码,将程序补充完整。Const n= 5Dim a(1 To n^2) As Integer   ‘数组a存储数塔数据,存储结构如图c所示Dim f(1 To n^2) As Integer   ‘数组f存储从第i层第j个数到底层尾结点的最大数字之和,其存储结构与数组a一样Private Sub Command2Click()‘生成数塔,将数据存入a数组中,代码略End SubPrivate Sub Command2Click()Dim i As Integer,  j As Integer, k As IntegerFor j=1 To nf((n-1)*n+j)=Next jFor i=For j=1 To ik=(1-1)*n+jf(k)= Next jNext iLabel1.Caption=“路径上的数字和最大值为:"+Str(f(1)End SubFunction max(a As Integer,  b As Integer) As IntegerIf a>b Then max=a Else max=bEnd Function 答案: 【1】58 【1】a((n-1)*n+j)或其他等价答案【2】n-1 To 1 Step-1或其他等价答案【3】a(k)+max(f(i*n+j),f(i*n+j+1))或其他等价答案或a(k)+max(f(k+n),f(k+n+1))或其他等价答案
信息技术 试题推荐