Тема 26. Обработка целочисленной информации с использованием сортировки

26.04 Скидки

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела обработка целочисленной информации с использованием сортировки
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#87928

Магазин предоставляет оптовому покупателю скидку по следующим правилам:

– на каждый третий товар ценой больше 401 рубля предоставляется скидка 25%;

– общая цена покупки со скидкой округляется вверх до целого числа рублей;

– порядок товаров в списке определяет магазин и делает это так, чтобы общая сумма скидки была наименьшей.

Вам необходимо определить общую цену закупки с учетом скидки и цену самого дорогого товара, на который будет предоставлена скидка.

Входные данные. Первая строка входного файла 26_3.txt содержит число N – общее количество купленных товаров. Каждая из следующих N строк содержит одно целое число – цену товара в рублях. В ответе запишите два целых числа: сначала общую цену покупки с учетом скидки, затем цену самого дорогого товара, на который предоставлена скидка.

Вложения к задаче
Показать ответ и решение

Идея решения в том, чтобы на третьи места в чеке поставить максимально дешёвые товары. Для этого отсортируем цены по возрастанию и отберём из них те, на которые возможна скидка, то есть дороже 401 рубля.

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

# Для округления вверх
from math import ceil


# Считаем файл
file = open("26_3.txt")
n = int(file.readline())
# Отсортируем числа по возрастанию
prices = sorted([int(i) for i in file])

# Список товаров по полной цене
full_prices = []
# Список товаров, на которые возможна скидка
maybe_discounted_prices = []

# Проходимся по товарам и определяем, может ли на них быть скидка
for i in prices:
    if i < 402:
        full_prices.append(i)
    else:
        maybe_discounted_prices.append(i)

# В итоговую сумму добавим все товары для которых скидка невозможна
summ = sum(full_prices)

# Количество товаров по скидке
count_discounts = len(maybe_discounted_prices) // 3
# Самый дорогой товар, на который будет скидка
max_discount = maybe_discounted_prices[count_discounts - 1]

# Посчитаем товары со скидкой
for i in range(count_discounts):
    summ += maybe_discounted_prices[i] * 0.75
# Посчитаем остальные товары без скидки
for i in range(count_discounts, len(maybe_discounted_prices)):
    summ += maybe_discounted_prices[i]

# Округляем сумму
summ = ceil(summ)

# Выводим ответ
print(summ, max_discount)
                                                                                                  
                                                                                                  

Ответ: 1873848 925

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!