Помогите решить задачу на Python)

Рейтинг: -5Ответов: 1Опубликовано: 24.08.2023

Задача:

Миша купил себе новый YouPhone. После очередного обновления в системе пропал счетчик процентов зарядов и пользоваться им стало очень сложно. Миша подробно изучал характеристики перед покупкой, поэтому он знает, что:

  • с 100% до 0% телефон разряжается ровно за a минут, при этом он теряет заряд равномерно

  • с 0% до 100% телефон заряжается ровно за b минут, при этом зарядка так же идет равномерно

  • зарядка не может опускаться ниже 0% или становиться выше 100%

В течение дня Миша постоянно перемещался и его телефон менял источник энергии n раз (с зарядки от сети на аккумулятор и наоборот). Известно, что в начале дня (в 00:00) телефон стоял на зарядке и был полностью заряжен. Помогите Мише найти оставшийся в конце дня процент заряда на его телефон.

Формат входных данных:

Первая строка входного файла содержит числа n, a, b — количество смен источника энергии телефона, время разряда и заряда аккумулятора соответственно.

Каждая из следующих n строк содержит время суток в формате «hh:mm», в которое была произведена смена источника питания. Данные уникальны и перечислены в хронологическом порядке

Формат выходных данных:

В выходной файл выведите процент заряда батареи в 23:59 с точностью четыре знака после запятой.

Мое решение: (неправильное)

    n, a, b = map(int,input().split()) 
    #комментарий - входные данные 
    x = 100 
    #комментарий - процент заряда 
    g, h = map(int,input().split(':')) 
    #комментарий - ввод времени 
    z = h + (60 * g) 
    #комментарий - переводим часы в минуты и складываем 
    for i in range(n-1): 
    g, h = map(int,input().split(':')) 
    v = h + (60 * g) 
    x = x - a / (z - v) 
    #Комментарий - 
    g, h = map(int,input().split(':')) 
    z = h + (60 * g) 
    x = x - b / (z + v) 
    print(x)

Помогите, пожалуйста, решить задачу.

Ответы

▲ 0Принят

Что же, давай разбираться...

  1. В цикле ты два раза вводишь g и h, поэтому вторую строчку g, h = map(int, input().split(':')) стоит убрать.
  2. Заведи переменную count, чтобы знать когда телефон снимают с зарядки и меняй её с false на true после каждой итерации.
  3. Почему ты a или b делишь на время, должно быть наоборот.
  4. Почему из x ты вычитаешь дробь? Домножай на 100, чтобы получить проценты, то есть примерно: x = x - (z - v) / a * 100.
  5. Если честно я вообще не понял, что такое z и v. Могу предложить сделать z - количество минут с прошлой записи, тогда x = max(x - 100 * (z / a), 0) или x = min(x + 100 * (z / b), 100), если аккумулятор разряжается или заряжается соответственно.