1)这两项运动在记录中必须连续出现,不能被其他运动打断,如“1,2,2,1,2”是一种可能的结果;“1,2,2,1,2,3”则不是可能的结果;
2)这两项运动在记录中出现的次数必须是最多的一种组合。
运动记录 |
1,1,2,3,2,3,2,3,3,1,1,4,3 |
||||
序号 |
① |
② |
③ |
④ |
⑤ |
两项运动 |
1,1,2 |
2,3,2,3,2,3,3 |
3,3,1,1 |
1,1,4 |
4,3 |
从上表分析可知,小张在一段时间内连续进行的两项运动有5种不同组合,其中组合②中的两项运动持续时间最长,所以最“喜爱”的两项运动为2和3,共连续进行了7次。
根据算法思想,编写VB程序实现如下功能:程序初始化时读取小张记录的一段时间内的所有运动项目,以逗号间隔显示在文本框Text1中,单击“寻找运动项目”按钮Command1,在标签Label4上显示最喜爱的两项运动编号,在文本框Text2中显示这两项运动最长持续的次数。程序运行界面如图所示。
Dim a(1 To 100) As Integer, n As Integer
Private Sub Form_Load( )
'读取已有记录项目总数n
'读取记录的每次运动项目存入数组 a,并在文本框Text1中显示,代码略
End Sub
Private Sub Command1_Click()
Dim x As Integer, y As Integer 'x, y分别表示当前记录中两个不同项目
Dim c1 As Integer, c2 As Integer 'c1,c2 分别表示两个项目在当前统计过程中出现的次数
Dim i As Integer, j As Integer, m1 As Integer, m2 As Integer, ans As Integer
i = 1: j = 1
Do While j <= n And a(i) = a(j)
j = j + 1
Loop
x = a(i): y = a(j)
c1 =
c2 = 1
ans = j - i + 1
Do While j < n
j = j + 1
If a(j) = x Then
c1 = c1 + 1
ElseIf a(j) = y Then
c2 = c2 + 1
Else
Do While
If a(i) = x Then c1 = c1 – 1 Else c2 = c2 - 1
i = i + 1
Loop
If Then
y = a(j)
c2 = 1
Else
x = a(j)
c1 = 1
End If
End If
If ans < j - i + 1 Then
ans = j - i + 1
m1 = x
m2 = y
End If
Loop
Label4.Caption = Str(m1) + "和" + Str(m2)
Text2.Text = Str(ans)
End Sub