СД
Саша Дроздов

помогите, пожалуйста, доработать программу

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

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

Дано одно число n - количество поездок.
Формат выходных данных
Выведите пять целых чисел, равные необходимому количеству билетов на 1, на 5, на 10, на 20, на 60 поездок. Если для какого-то данного n существует несколько способов приобретения билетов одинаковой стоимости, необходимо вывести ту комбинацию билетов, которая дает большее число поездок.

Разбор добавил Константин Софиюк

Целочисленным делением n на 60 находим кол-во билетов по 60 поездок, если остаток деления будет >= 36, то выгоднее докупить еще один билет по 60, чем докупать по 20, 5 и т. д. (можно заметить, что если купить 1х20, 1х10, 1х5,1х1 билетов (36 поездок) , то мы получаем стоимость равную цене билета по 60, но за эту же стоимость можно купить 60 поездок, поэтому берем еще один по 60). Если еще есть остаток, то докупаем кол-во билетов равное целочисленному делению остатка на 20, получаем остаток от этого деления и, если он >= 18, то выгоднее докупить еще один билет по 20. Повторяем целочисленное деление только уже на 10, получаем кол-во билетов по 10, если остаток от этого деления равен 9, то докупаем еще один билет по 10. Кол-во билетов по 5 получаем также целочисленным делением. Кол-во билетов по 1 будет равно конечному остатку.

загвоздка вот в этом : Если для какого-то данного n существует несколько способов приобретения билетов одинаковой стоимости, необходимо вывести ту комбинацию билетов, которая дает большее число поездок

вот программа

var n,m1, m5, m10, m20, m60, m:longint;
begin
read(n);
m60:=n div 60; {кол-во билетов по 60}
m1:=0;
m5:=0;
m10:=0;
m20:=0;
m:= n mod 60;
if m >=36 then inc(m60)
else
begin
m:=m mod 20;
m20:=m div 20 ; {кол-во билетов по 20}
if m>=18 then inc(m20) else
begin
m:=m mod 10;
m10:=m div 10;{кол-во билетов по 10}
if m mod 10=9 then inc(m10) else
begin
//m:=m mod ;
m5:=m div 5; {по 5}
m1:=m mod 5 {по 1}
end
end
end;
writeln(m1, ' ', m5, ' ', m10, ' ', m20, ' ', m60)
end.

ЕК
Елена Коптелова

Пишите на почту или в асю 586178755 решу все в кратчайшие сроки) насколько я понимаю эта задача с informatics.mccme.ru у меня там много решено))

Похожие вопросы
Помогите пожалуйста с программой
помогите, пожалуйста, доработать программу на языке Java
Помогите доработать скрипт
помогите пожалуйста доработать программу
помогите доработать программу.
Помогите доработать программу на visual basic !(((
помогите доработать HTML код
Как улучшить, что доработать. Сейчас загружу
помогите доработать или поменять программу тренировок
Помогите доработать программу