试题

试题 试卷

logo

题型:综合题 题类:常考题 难易度:普通

浙江省2020届高三上学期信息技术五校联考试卷

求最长升序子序列的长度。一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是升序的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些升序的子序列(ai1, ai2, ..., aiK),这里 1 <= i1 < i2 < ...<iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些升序子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8)。小王设计VB程序用于求最长升序子序列的长度,在文本框Text1中输入n个各不相同的数据(各数据之间以逗号隔开),单击“求解”按钮Command1后在标签Label1中输出最长升序子序列的长度,运行界面如图所示。

具体算法描述如下:

⑴将文本框Text1中的n个数据依次读取到数组a中;

⑵构造一个数组b(j),j表示升序子序列的长度,b(j)的值表示所有j长度升序序列中最小的末尾元素值。例:序列(2,6,4,5),长度为2的子序列有(2,6)、(2,4)、(2,5)、(4,5),则b(2)=4;

⑶从第1个元素开始,依次处理到第i(1≤i≤n)个元素为止,b数组所能达到的最大下标值maxlen,处理过程分两种情况:

A.a(i)>b(maxlen),则最长升序子序列的长度增加;

B.a(i)<b(maxlen),则在b数组中逆序查找到第一个b(j)>a(i)(maxlen-1≤j≤1),更新数组b中升序子序列长度为j+1时所存储的元素值。

以图中数据为例:

⑷数组b的最大下标值即为最长升序子序列的长度。实现上述过程的VB程序如下,请回答下列问题:

(1)、若在文本框Text1中输入的序列为(4,7,9,8,6),则数组元素 b(2)的值为
(2)、请在划线处填入合适的代码

Private Sub Command1_Click()

Dim a(1 To 100) As Integer '存储原序列

Dim b(1 To 100) As Integer '存储各长度序列的最小末尾元素Dim s As String

Dim n As Integer, i As Integer, j As Integer, maxlen As Integer s = Text1.Text

n = 1: j = 1

For i = 1 To Len(s) c = Mid(s, i, 1)

If c = "," Then

a(n) = Mid(s, j, i - j ) n = n + 1

j = i + 1 End If

Next i

 maxlen = 1: b(1) = a(1) For i = 2 To n

If a(i) > b(maxlen) Then

maxlen = maxlen + 1 b(maxlen) = a(i)

Else

j = maxlen - 1: flag = True Do While j >= 1 And flag

If a(i) > b(j) Then

flag = False End If

j = j - 1 Loop

IfThen b(1) = a(i)

End If Next i

Label1.Caption = "最长升序子序列的长度为:" + Str(maxlen)

End Sub

举一反三
【加试题】猜数字游戏。由用户选择需要猜测的数字长度后,电脑随机产生一串相应长度的数字,用户输入猜测的数字,电脑判断用户所猜密码的正确性,如果用户输入的数字和电脑产生的密码完全一致则输出“恭喜你猜中了!”,否则程序将输出用户和计算机产生数字之间不同的字符数。电脑产生的n位数字分别保存在数组num的n个下标变量num (1)、num (2)、…、num (n)中。
    程序界面如图VB-1所示,用户在文本框Text1中输入数字长度,单击“确定长度”按钮(Command1)后,在文本框Text2中输入数字,单击“判定”按钮(Command2)后,程序在标签Label3中输出校验结果。
相应的程序如下,在程序划线处,填入适当的语句或表达式,把程序补充完整。

Dim num(1 To 25) As Integer
Private Sub Command1_Click()
 Dim i As Integer,n As Integer
 n = Val(Text1.Text)
 For i = 1 To n                   '产生n位小于8的密码,每位一个非负整数,保存到数组num
  num(i) = {#blank#}1{#/blank#}
 Next i
End Sub
Private Sub Command2_Click()
Dim x(1 To 25) As Integer, i As Integer, s As Integer, n As Integer
 n = Val(Text1.Text)
 For i = 1 To n
     x(i) = {#blank#}2{#/blank#}    '把文本框中数字逐个分割出来并转化成数值
 Next i
 s = 0                               '变量s保存不同字符的总数
 For i = 1 To n
  If num(i) <> x(i) Then  s = s + 1
 Next i
 If {#blank#}3{#/blank#} Then
  Label3.Caption = "恭喜你猜中了!"
 Else
      Label3.Caption = "你输入的数字共有" + Str(s) + "个字符不符"
 End If
End Sub
返回首页

试题篮