Как решить следующую задачу?

Условие задачи:
Билет на одну поездку в метро стоит 15 рублей, билет на 10 поездок стоит 125 рублей, билет на 60 поездок стоит 440 рублей. Пассажир планирует совершить n поездок. Определите, сколько билетов каждого вида он должен приобрести, чтобы суммарное количество оплаченных поездок было не меньше n, а общая стоимость приобретенных билетов – минимальна.

Входные данные:
Дано одно число n - количество поездок.

Выходные данные:
Выведите три целых числа, равные необходимому количеству билетов на 1, на 10, на 60 поездок.

В коде ниже представлен мой вариант решения этой задачи. Она проходит большую часть тестов. В комментарии расположен первоначальный алгоритм, который проходит тесты абсолютно также, как и незакомментированный (за исключением времени). Что я могу делать не так?
#include <stdio.h>
int main() {
  int n, n10, n60;
  scanf("%d", &n);
 
  n60 = n / 60;
  n = n % 60;
  n10 = n / 10;
  n = n % 10;
  
  if (n > 8) {
    n = 0;
    n10++;
  }
  
  if (n10 > 3) {
    n10 = 0;
    n60++;
  }
  
  /*long sum = n*15 + n10*125 + n60*440;
  long temp = (n10 + 1)*125 + n60*440;
  if (temp < sum) {
    n = 0;
    n10++;
    sum = temp;
  }
  
  if (440*(n60 + 1) < sum) {
    n10 = 0;
    n60++;
  }*/
  
  printf("%d %d %d", n, n10, n60);
 
  return 0;
}
  • Вопрос задан
  • 5647 просмотров
Решения вопроса 1
@MiiNiPaa
Брать билет на 60 поездок выгодно, когда количество поездок больше 34:
34 поездки мелочью: 125*3 + 15*4 = 375 + 60 = 435р
35 поездок мелочью: 125*3 + 15*5 = 375 + 75 = 450р

У вас случаи, когда в остатке [35;39] поездок не учитываются.

EDIT: Хотя случай с 39 поездками учтётся по другим причинам.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Damir1989
Вот мое решение данной задачи! Изучаю питон месяц
Пробелы сами знаете куда ставить
def ticket_metro():
int(input("n = "))
t_1 = 1
t_10 = 10
t_60 = 60

if n % 60 >= 35:
t_1 = 0
t_10 = 0
t_60 = 1 + (n // 60)
print(t_1, t_10, t_60)
elif n % t_60 < 35:
if (n % 60) % 10 < 8:
t_60 = n // 60
t_10 = n % 60 // 10
t_1 = (n % 60) % 10
else:
t_60 = n // 60
t_10 = 1 + (n % 60 // 10)
t_1 = 0
print(t_1, t_10, t_60)
Ответ написан
Комментировать
@natalalubcenko
Тут разбор этой задачи, правда на СИ++
https://youtu.be/IBABrQwJI6k
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы