Решения — уровень 2: учитываем остаток и условия#
5. Места на открытой лекции#
Строим модель#
Полные ряды можно убрать из рассмотрения: в каждом из них свободных мест нет. Остаток N % C показывает, сколько гостей сидит в последнем ряду.
- Если остаток равен 0, последний ряд заполнен целиком, свободных мест 0.
- Если остаток не равен 0, свободно
C - остатокмест.
Проверка#
47 = 3 * 12 + 11: три ряда заполнены полностью, в последнем сидят 11 гостей из 12. Остаётся одно место.
C++#
using namespace std;
int
6. Покраска стены#
Строим модель#
Площадь стены — W * H. Дверь занимает D1 * D2, окно — X1 * X2. Вычитаем непокрашиваемые площади:
paintArea = W * H - D1 * D2 - X1 * X2.
Если одного литра хватает на C квадратных метров, для paintArea нужно paintArea / C литров. Но краска продаётся целыми литрами, поэтому дробную часть нужно округлить вверх. Для положительного числителя и знаменателя целочисленное округление вверх можно получить так:
paintArea / C + (paintArea % C != 0).
Проверка#
Площадь стены — 24 м², проёмы занимают 2 + 2 = 4 м². Красят 20 м². Двух литров хватит на 16 м², поэтому нужен третий литр.
C++#
using namespace std;
int
7. Пожертвование с поддержкой спонсора#
Строим модель#
Каждый пожертвованный рубль увеличивает общий сбор на 3 рубля: 1 рубль от участника и 2 рубля от спонсора. Если до цели не хватает need = T - M, нужно минимальное целое x, для которого 3x ≥ need.
Если цель уже достигнута (M ≥ T), ответ 0. Иначе округляем need / 3 вверх. В целых числах это need / 3 плюс один, если есть остаток.
Проверка#
До цели не хватает 1000 - 730 = 270 рублей. Каждые 3 рубля сбора получаются с одного пожертвованного рубля, значит, достаточно 270 / 3 = 90 рублей.
C++#
using namespace std;
int
8. Прокат автомобиля#
Строим модель#
Первые 120 минут включены в базовую стоимость. Если прокат длился дольше, считаем лишние минуты extra = T - 120.
Каждый начатый дополнительный час тарифицируется целиком. Поэтому число платных часов равно целой части extra / 60 плюс один, если после деления есть остаток. Итоговая стоимость — базовая стоимость плюс цена всех дополнительных часов.
Проверка#
При 181 минуте после первых 120 остаётся 61 минута. Это два начатых часа: 60 + 120 * 2 = 240. Вместе с базовыми 500 рублями получается 740 рублей.
C++#
using namespace std;
int