Найти Промежуток времени когда в музее находится наибольшее число людей - VB
Формулировка задачи:
Ежедневно музей посещает N человек. Для каждого из них есть Время прихода и ухода. Найти Промежуток времени когда в музее находится наибольшее число людей
Я не прошу чтобы за меня вы писали код. Прошу лишь помочь мне как вобще это решить. Было у меня несколько вариантов, но они не работают. Из олимпиадчиков ее никто решил.
Решение задачи: «Найти Промежуток времени когда в музее находится наибольшее число людей»
textual
Листинг программы
Option Explicit
Dim S, St As String
Private Type typeVisit
T As Date
M As Integer
End Type
Private Sub Command1_Click()
Dim i As Integer, j As Integer, V() As typeVisit, n As Integer
Dim x As Integer, maxx As Integer, t1 As Date, t2 As Date
For i = 0 To UBound(S) - 1
n = n + 2: ReDim Preserve V(1 To n)
V(n - 1).T = Split(S(i))(0): V(n - 1).M = 1
V(n).T = Split(S(i))(1): V(n).M = -1
Next i
SortVisitos V 'Сортируем массив
For i = 1 To n
x = x + V(i).M ' считаем кол-во посетителей
If maxx < x Then ' определяем максимальное количество посетителей
maxx = x
t1 = V(i).T 'время прихода
For j = i To n
'определяем время ухода
If V(j).M < 0 Then t2 = V(j).T: Exit For
Next j
End If
Next i
Cls
Print Replace(St, " ", vbTab)
Print "Больше всего посетителей (" & maxx & ") было в период между " & t1 & " и " & t2
End Sub
'Процедура сортировки массива пользовательского типа по возрастанию по полю Т(по времени)
Private Sub SortVisitos(V() As typeVisit)
Dim i As Integer, j As Integer, Vis As typeVisit
For i = 1 To UBound(V)
For j = 1 To UBound(V) - 1
If V(j).T > V(j + 1).T Then
Vis = V(j)
V(j) = V(j + 1)
V(j + 1) = Vis
End If
Next j
Next i
End Sub
'
'''''''''''''''''''''''''''''''''''''''''
' Дальше просто для отладки (и наглядности тоже) получение данных ,
' лучше, конечно сделать получение данных из файла
Private Sub Form_Load()
Call GetVisitors
S = Split(St, vbCrLf)
End Sub
Private Sub GetVisitors()
AddVisitor "8:00 10:28"
AddVisitor "8:01 8:13"
AddVisitor "8:02 11:45"
AddVisitor "8:03 9:44"
AddVisitor "8:04 17:45"
AddVisitor "8:05 16:33"
AddVisitor "8:05 12:36"
AddVisitor "8:05 11:06"
AddVisitor "8:05 13:19"
AddVisitor "8:05 15:02"
AddVisitor "8:04 12:30"
AddVisitor "8:03 11:56"
AddVisitor "8:02 13:22"
AddVisitor "8:02 14:53"
AddVisitor "8:01 19:11"
AddVisitor "8:10 14:01"
AddVisitor "8:10 11:15"
AddVisitor "8:00 13:27"
AddVisitor "8:00 12:46"
AddVisitor "9:06 9:14"
AddVisitor "9:06 9:14"
AddVisitor "9:06 9:14"
AddVisitor "10:00 10:33"
AddVisitor "8:00 8:10"
AddVisitor "8:19 18:22"
AddVisitor "8:55 10:21"
AddVisitor "9:55 11:24"
AddVisitor "9:55 11:24"
End Sub
Private Sub AddVisitor(ByRef NewVisitorsTime As String)
St = St & NewVisitorsTime & vbCrLf
End Sub