①在搭乘一次地铁后可以获得一张优惠票,有效期为45分钟,在有效期内可以消耗这张优惠票,免费搭乘一次票价不超过地铁票价的公交车。在有效期内指开始乘公交车的时间与开始乘地铁的时间之差小于等于45分钟,即:t_bus-t_ subway <=45
②搭乘地铁获得的优惠票可以累积,即可以连续搭乘若干次地铁后再连续使用优惠票搭乘公交车。
③搭乘公交车时,如果可以使用优惠票一定会使用优惠票;如果有多张优惠票满足条件,则优先消耗获得最早的优惠票。
小轩同学编写了VB程序计算最近公共交通出行的费用,程序运行时,在文本框Text1中输人小轩的公共交通出行记录(各数之间以逗号分隔),单击“获取数据”按钮Command1将数据按顺序存储在数组a中并在List1中显示。其中第i条出行记录乘坐的交通工具存储在数组元素a(3*i-2)中,0代表地铁,1代表公交车;第i条记录乘车的票价存储在数组元素a(3*i-1)中;第i条记录开始乘车的时间(距0时刻的分钟数)存储在数组元素a(3* i)中。如小轩最近6条乘车记录的数据为0,5,1,0,20,16,0,7,23,1,18,31,1,4,38,1,7,68在数组a中的存储结构如下表所示。
a(1) |
a(2) |
a(3) |
a(4) |
a(5) |
a(6) |
…… |
a(16) |
a(17) |
a(18) |
0 |
5 |
1 |
0 |
20 |
16 |
…… |
1 |
7 |
68 |
单击“计算”按钮Command2,则在标签Label2中显示小轩同学的公共交通出行总费用。程序运行界面如图所示。
Const maxn= 1005
Dima(1 To 3 * maxn) As Integer
Dim ticket(1 To 3 * maxn) As Integer
Dim i,n,k,x,y,cost As Integer
Dim tail,head As Integer
Dim s As String
Dim found As Boolean
Private Sub Command1_Click()
s= Text1.Text
k= 1
For i=1 To L en(s)
c= Mid(s,i,1)
If c="," Then k=k+1 Else
Next i
'将各条出行数据输出在列表框List1中,代码略
End Sub
Private Sub Command2_ Click()
head=1:tail= 1
For i=1 To k\ 3
If a(3 * i-2)=0 Then
cost= cost+a(3 * i-1)
ticket(3 * tail)=a(3 * i)+45
tail= tail+1
Else
Do While head < tail And ticket(3 * head) < < a(3 * i)
head= head+1
Loop
If found= False Then cost=cost+a(3 * i-1)
End If
Next i
Label2.Caption= Str( cost)
End Sub
Function pd(x As Integer, y As Integer) As Boolean
pd= False
For j=x Toy
If ticket(3 * j-1) >=a(3 * i-1) And ticket(3 * j-2)=0 Then
pd=True
ticket(3 * j-2)=1
Exit Function
End If
Next j
End Function