题目

在数组a中按顺序找出一组升序子序列,可以不连续,但要求长度最长。例如:数组a的值分别为2,11,4,13,5,7。升序子序列分别有[2,11]、[2,4]、[2,11,13]、[2,4,13]、[2,4,5]、[2,4,5,7]、[11,13]、[4,13]、[4,5]、[4,5,7]、[5,7],其中最长升序子序列的数据是2,4,5,7。 算法思路如下: 1)求以a(i)为结尾元素的最长升序子序列时,找到所有序号j(j=1,2……i-1),且a(j)<a(i)。 如果这样的元素存在,且d(j) >= d(i)(d(i)记录i位置的最长升序子序列长度),那么就增加i 位置的最长升序子序列长度,并记录该升序子序列倒数第二个位置。 2)在d 数组中找出最大值,即最长升序子序列长度。 3)例如,2、11、4、13、5、7,d(1)=1,d(2)=2,d(3)=2,d(4)=3,d(5)=3,d(6)=4,所以最长升序子序列长度为4,是以a(6)为结尾元素。 现设计了如下VB 程序,界面如图所示,请回答下列问题: (1) 观察上图,最长升序子序列的数据是。 (2) 请在划线处填入合适的代码。 Const n = 9 Dim a(1 To n) As Integer Private Sub Form_Load()     '生成n个[1,10]范围的随机数,存储在a 数组,并显示在列表框List1。代码略 End Sub Private Sub Command1_Click()     Dim d(1 To n) As Integer      '记录i位置的最长升序子序列长度     Dim pre(1 To n) As Integer    '记录i结尾的最长升序子序列前一数据的位置     Dim st As String, i As Integer, k As Integer, maxlen As Integer     For i = 1 To n         d(i) = 1     Next i     For i = 2 To n         For j = 1 To i - 1             If a(j) < a(i) And d(j) >= d(i) Then                 d(i) =                 pre(i) = j             End If         Next j     Next i     maxlen = 0 : k = 0     For i = 1 To n         If  Then maxlen = d(i) : k = i     Next i     Do While k <> 0         st = a(k) & "," & st             Loop     Text1.Text = Mid(st, 1, Len(st) - 1) End Sub 答案: 【1】3,4, 6,7,9 【1】d(j)+1或d(i)+1【2】maxlen<d(i)【3】k=pre(k)
信息技术 试题推荐
最近更新