BRUTAL Play
Мастер
(1045)
5 месяцев назад
Алгоритм решения задачи:
Инициализация переменных:
Создадим переменные для хранения времени первой поездки по тарифу «90 минут» и состояния о том, переключён ли тариф.
Также создадим список для результатов, который будем заполнять по мере обработки каждой поездки.
Поочередная обработка поездок:
Для каждой поездки:
Преобразуем время из формата h:mm в минуты с начала суток для упрощения расчетов.
Проверим, был ли предыдущий тариф «90 минут» и прошло ли с момента первой поездки по этому тарифу менее 90 минут.
Если это первая поездка:
Считаем 57 рублей за «Единый» и переключаем на тариф «90 минут».
Если вторая поездка на метро:
Если она в пределах 90 минут от первой поездки на наземном транспорте — это будет 28 рублей.
Если более 90 минут или очередная поездка на метро, то снова 57 рублей.
Если это наземный транспорт и предыдущая поездка была на метро, она будет бесплатной.
Продолжаем до обработки всех 1000 поездок.
Реализация в Excel:
Импортируйте данные в новую таблицу, поместив время в столбец A и тип поездки в столбец B.
Запрограммируйте алгоритм в третьем столбце (например, в столбце C):
C1: ="" (заголовок)
C2: =IF(AND(A2<>"", B2<>""), process_trip(A2, B2), "")
Создание вспомогательной функции. Пример логики на VBA. В Excel можно использовать что-то вроде следующего кода:
Function process_trip(trip_time As String, trip_type As String) As Integer
Static last_trip_time As Long
Static last_trip_type As String
Static start_time As Long
Static in_90min As Boolean
Static count As Integer
Dim current_trip_time As Long
current_trip_time = TimeSerial(Split(trip_time, ":")(0), Split(trip_time, ":")(1), 0) * 1440
If count = 0 Then ' Первая поездка
last_trip_time = current_trip_time
last_trip_type = trip_type
start_time = current_trip_time
count = count + 1
process_trip = 57
in_90min = True
ElseIf in_90min Then
If trip_type = "M" Then
If last_trip_type = "A" And (current_trip_time - last_trip_time <= 90) Then
process_trip = 28
ElseIf last_trip_type = "M" Then
process_trip = 57
in_90min = False
Else
process_trip = 57
End If
Else
process_trip = 0
last_trip_time = current_trip_time
last_trip_type = trip_type
End If
Else
If trip_type = "M" Then
process_trip = 57
last_trip_time = current_trip_time
last_trip_type = trip_type
in_90min = False
Else
process_trip = 0
last_trip_time = current_trip_time
last_trip_type = trip_type
End If
If (current_trip_time - start_time <= 90) Then
in_90min = True
End If
End If
End Function
Скопируйте функцию по всем 1000 строкам. В результате мы получим соответствующую сумму списания для каждой поездки.
Скопируйте столбец результатов (суммы списания) и вставьте его в поле для ввода результирующих значений.
Примечание:
На практике, вам может понадобиться дополнительно отладить код, и обратить внимание на возможные исключения или ошибки в расчетах, например, если время поездок в формате не будет корректным или возникнут проблемы с временными интервалами.
Этот алгоритм должен дать вам корректные результаты для всех 1000 поездок, следуя правилам тарифов "Единый” и "90 минут".
-Ученик (69)
5 месяцев назад
А если можно можете мне это решить
Вячеслав Миронников
Профи
(904)
5 месяцев назад
Тариф «90 минут» активируется автоматически при пересадке с метро, монорельса, МЦК или МЦД на наземный транспорт (автобусы, трамваи, электробусы). 13
Стоимость проезда с пересадками в течение 90 минут — 85 рублей: 1
57 рублей списываются в метро, монорельсе, на МЦК или МЦД; 1
28 рублей — при первой поездке в наземном транспорте. 1
Чтобы тариф действовал, нужно соблюсти следующие условия: 1
все поездки и пересадки совершить в течение 90 минут; 1
за эти 90 минут допускается только одна поездка на метро, монорельсе, МЦК или МЦД и неограниченное число пересадок на наземном транспорте. За вторую поездку на метро, монорельсе, МЦК или МЦД плата списывается как обычно; 1
в каждом виде транспорта прикладывать «Тройку» к валидатору или турникету.
В московском транспорте можно оплачивать проезд при помощи тарифа «Кошелёк» карты «Тройка». Есть два вида тарифа:
«Единый» (57 рублей) — одна поездка на любом виде транспорта;
«90 минут» (85 рублей) — не более одной поездки на метро и любое количество поездок на наземном транспорте в течение не более 90 минут с момента начала первой поездки (между началом поездки и началом первой поездки по тарифу «90 минут» должно пройти не более 90 минут).
Смена тарифа происходит автоматически: при первой поездке списывается 57 рублей, и если следующая поездка была совершена в течение 90 минут, причём это не повторная поездка на метро, то с кошелька списывается 28 рублей (в сумме получается 85 рублей) и карта переключается на тариф «90 минут».
Последующие поездки, удовлетворяющие условиям тарифа «90 минут», будут бесплатными. Если очередная поездка будет повторной поездкой на метро или с момента первой поездки прошло более 90 минут, то с карты будет списано 57 рублей по тарифу «Единый», затем, возможно, карта опять переключится на тариф «90 минут» и т. д.
Таким образом, каждая поездка может приводить к списанию 57 рублей (тариф «Единый»), 28 рублей (переключение на тариф «90 минут») или 0 рублей (бесплатная поездка по тарифу «90 минут»).
Вам дана информация о 1000 совершённых поездках. Определите сумму списания с карты при каждой поездке.
Данные для выполнения этого задания содержатся в электронной таблице.
Вы можете скачать файл с данными в одном из двух форматов:
Microsoft Excel (XLSX) или LibreOffice Calc (ODS).
Для выполнения задания вы можете использовать электронные таблицы из офисного пакета или любые другие средства вашего компьютера.
Столбец A электронной таблицы содержит время поездки в формате h:mm, то есть сначала количество часов, а после двоеточия — двузначное число минут. Время отсчитывается от некоторого условного момента, и значение часов может превышать 24.
Столбец B содержит одну букву — вид поездки. Буква «M» (английская) обозначает поездку на метро, буква «A» (английская) обозначает поездку на наземном транспорте.
Вы должны определить сумму списания с карты при совершении каждой из данных поездок. Полученные 1000 чисел запишите в отдельном столбце электронной таблицы. Выделите этот столбец, скопируйте в буфер обмена и вставьте в поле для ввода ответа.
Ваш ответ будет принят на проверку, если он будет содержать 1000 строк и в каждой строке будет только одно число.
Рассмотрим пример. Пусть дана следующая таблица с информацией о поездках.
A B
1. 0:20 A
2. 0:40 M
3. 1:40 A
4. 2:00 A
5. 2:20 A
6. 2:30 M
7. 2:50 M
8. 4:20 A
Тогда ответ будет таким:
57
28
0
57
28
0
57
28
Первая поездка на наземном транспорте стоит 57 рублей, при второй поездке на метро билет переключится на тариф «90 минут», и с карты спишется 28 рублей, поэтому третья поездка на наземном транспорте будет бесплатной. Четвёртая поездка на наземном транспорте произойдёт по тарифу «Единый», потому что разница между временем этой поездки (2:00) и временем первой поездки по тарифу «90 минут» (0:20) больше 90 минут. При пятой поездке на наземном транспорте произойдёт переключение на тариф «90 минут», шестая поездка на метро будет бесплатной, седьмая поездка на метро будет по тарифу «Единый», потому что в тарифе «90 минут» уже была поездка на метро. Восьмая поездка на наземном транспорте пройдёт по тарифу «90 минут», потому что разница времён 4:20 и 2:50 составляет ровно 90 минут.
таблица в формате ods
таблица в формате xlsx