он хочет узнать, сколько дней ему осталось до того момента, когда он начнет работать над устранением угрозы и сколько дней уйдет на саму работу по обезвреживанию вируса. Помогите Евгению написать программу, которая по заданным числам t, k и m определит, сколько дней осталось до начала работы над устранением угрозы и сколько дней потребуется на саму работу.
<p>Формат входных данных</p>
<p>В каждой из n <br /> строкого входного файла заданы три целых числа: t, k и m<li> (1 ≤ t, k, m ≤ 10<sup>9)</sup></li><br /> через пробел<li> n (0 < n <br /> = 1000)</li><br /> – количество входных наборов.<br />
<p>Формат выходных данных</p>
<p>Для каждого набора входных данных следует вывести в отдельной строке два целых числа – через пробел число дней до начала работы системного администратора и число дней работы системного администратора.<br /></p>
1. Решим ее полным перебором.
2. Напишем функцию, которая по входным данным t, k, m будет возвращать число дней до начала работы системного администратора и число дней работы системного администратора.
3. Используем эту функцию в основной программе, которая будет считывать входные данные, вызывать функцию и выводить результат.
4. Протестируем программу на разных тестовых данных, включая граничные случаи и случай с максимально возможными значениями t, k, m.
Решение:
1. Решим задачу полным перебором, чтобы убедиться, что мы не упускаем какие-либо возможные варианты. Переберем все возможные числа дней до начала работы системного администратора от 1 до t, и для каждого значения проверим, выполняется ли условие k ≤ (дней до начала работы системного администратора + m * дней работы системного администратора). Если условие выполняется, найдем минимальное значение m и вернем два значения - дни до начала работы и дни работы.
2. Напишем функцию get_days, которая будет принимать три аргумента - t, k, m и возвращать два значения - дни до начала работы и дни работы.
3. Определим переменные min_days_to_start и min_days_work равными t и m * t соответственно.
4. В цикле переберем все возможные значения дней до начала работы от 1 до t и для каждого значения проверим, выполняется ли условие k ≤ (дней до начала работы + m * дней работы). Если условие выполняется, найдем минимальное значение m и обновим значения min_days_to_start и min_days_work.
5. В конце цикла вернем найденные значения - min_days_to_start и min_days_work.
def get_days(t, k, m):
min_days_to_start = t
min_days_work = m * t
for days_to_start in range(1, t + 1):
if k <= days_to_start + m * days_work:
days_work = m
if days_to_start + days_work < min_days_to_start + min_days_work:
min_days_to_start = days_to_start
min_days_work = days_work
return (min_days_to_start, min_days_work)
6. Создадим основную программу, которая будет считывать количество наборов данных n, а затем считывать n наборов данных. Для каждого набора данных вызовем функцию get_days и выведем результат в требуемом формате.
n = int(input())
for _ in range(n):
t, k, m = map(int, input().split())
days_to_start, days_work = get_days(t, k, m)
print(days_to_start, days_work)
7. Протестируем программу на разных тестовых данных, включая граничные случаи и случай с максимально возможными значениями t, k, m. Проверим, что программа работает корректно и выдает ожидаемый результат.