Найти Промежуток времени когда в музее находится наибольшее число людей - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы