Классно, давай разберёмся и подведём к подсказке, чтобы ты смог сам решить и получить нужные числа.
Что нужно сделать в задаче своими словами
- Всю коллекцию цен нужно отсортировать по возрастанию.
- Для акции 1: первые 30% самых дешёвых товаров получают скидку 10%, остальные товары получают скидку 84%.
- Для акции 2: первые 29% самых дешёвых товаров получают скидку 62%, оставшиеся товары получают скидку 31%.
- В обеих акциях считается прибыль от продажи всех товаров (то есть сумма цены после применения скидки).
- Сравниваем прибыли двух акций и выводим:
- разницу между прибылями обеих акций (целая часть);
- стоимость (цена) самого дорогого товара, который реализуется при выбранной акции, после применения соответствующей скидки (целая часть).
Подсказка (пошагово)
- Шаг 1. Прочитай N и список цен, отсортируй их по возрастанию: a[0], a[1], ..., a[N-1].
- Шаг 2. Найди количество товаров в «самых дешёвых» частях:
- k30 = floor(0.3 * N)
- k29 = floor(0.29 * N) Так как N кратно 20, для 30% эта величина будет целым, для 29% — тоже можно взять через целочисленное деление (микрокорректность в коде учитывается).
- Шаг 3. Вычисли прибыли:
- Призма 1: прибыль1 = 0.9 * sum(a[0:k30]) + 0.16 * sum(a[k30:N])
- Призма 2: прибыль2 = 0.38 * sum(a[0:k29]) + 0.69 * sum(a[k29:N]) Подсчёт можно делать в целых числах (например, через умножение на соответствующие множители и деление на 10/100), чтобы не путаться с плавающей точкой.
- Шаг 4. Сравни: если прибыль1 > прибыль2 — выиграла акция 1, иначе — акция 2.
- Шаг 5. Разница: разница = floor(|прибыль1 − прибыль2|).
- Шаг 6. Цена «самого дорогого товара» после скидки в выигравшей акции:
- Если выиграла акция 1: самый дорогой товар — это последний элемент списка a[N-1], после скидки 84% на него даёт итоговую цену a[N-1] * 0.16.
- Если выиграла акция 2: цена после скидки на самый дорогой товар — a[N-1] * 0.69. В обоих случаях возьми целую часть.
- Шаг 7. Выведи два числа: разницу и цену после скидки у самого дорогого товара выбранной акции.
И несколько практических замечаний
- Чтобы избежать ошибок с вещественными числами, можно держать вычисления в дробях/целых. Например:
- прибыль1 = sum_cheapest * 9 / 10 + sum_rest * 16 / 100
- прибыль2 = sum_cheapest29 * 38 / 100 + sum_rest * 69 / 100 Затем возьми целую часть финального результата.
- В условии сказано: целые части найденных чисел должны быть записаны в форме, поэтому после вычислений приводим к int (или аналогичной операции floor).
- Второй вывод зависит от того, какая акция выиграет. В любом случае это просто число после скидки на самый дорогой товар.
Если хочешь, могу проверить твой код, когда напишешь. Или можешь прислать свой набросок — подскажу конкретно, где может зарыться ошибка.
Пожалуйста, оцени мой ответ лайком или дизлайком.