Условие задачи
В час пик на остановку одновременно подъехали три маршрутных такси, следующие по одному маршруту, в которые тут же набились пассажиры. Водители обнаружили, что количество людей в разных маршрутках разное, и решили пересадить часть пассажиров так, чтобы в каждой маршрутке было поровну пассажиров. Требуется определить, какое наименьшее количество пассажиров придется при этом пересадить.
Входные данные
Три натуральных числа, не превосходящих 100 — количество пассажиров в первой, второй и третьей маршрутках соответственно.
Выходные данные
Выведите одно число — наименьшее количество пассажиров, которое требуется пересадить. Если это невозможно, выведите слово IMPOSSIBLE (заглавными буквами).
Тесты
№ | Ввод | Вывод |
1 | 1 2 3 | 1 |
2 | 6 7 4 | IMPOSSIBLE |
3 | 18 10 2 | 8 |
4 | 54 10 96 | IMPOSSIBLE |
5 | 27 27 27 | 0 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> using namespace std; int main() { int b1, b2, b3; cin >> b1 >> b2 >> b3; if ((b1 + b2 + b3) % 3 != 0) { cout << "IMPOSSIBLE" << endl; } else { int average; // среднее арифметическое int count = 0; // наименьшее количество пассажиров, которое требуется пересадить average = (b1 + b2 + b3) / 3; if (b1 > average) count += b1 - average; if (b2 > average) count += b2 - average; if (b3 > average) count += b3 - average; cout << count << endl; } return 0; } |
Решение
Мы сможем рассадить пассажиров поровну в три маршрутки только тогда, когда их общее количество кратно трем. Если это условие не выполняется, выводим на экран слово IMPOSSIBLE.
Иначе вычисляем среднее арифметическое исходного количества пассажиров каждой маршрутки по формуле: $\frac{b_{1}+b_{2}+b_{3}}{3}$ и находим минимальное количество пересаживаемых пассажиров, суммируя только положительные отклонения от среднего арифметического.
Здравствуйте, стоит убрать кириллицу из постоянной ссылки.
Спасибо. Исправила)
Жаль, что никто из нас не заметил, что на сайте уже есть решение этой задачи. Но, не беда.
— Ключевые слова просто все взяты из условия (легенды). А решение? У вас же задача на делимость, на среднее арифметическое. А получается, что это задача на такси.
По оформлению
— Если в заглавии идентификатор и текст с большой буквы или два предложения, то нужна точка. Посмотрите, как это сделали другие.
По объяснению
— Для объяснения следует использовать те термины, которые даны в условии, либо очевидны и не двусмысленны. Вы используете слово «задание». Сначала оно означает «пересадка пассажиров», потом «выполнение программы». Да и то не всегда правильно. Если вы хотите сказать, что return завершит выполнение программы (задания?), то я соглашусь. Но return у Вас один, а «завершаете задание» Вы дважды. Возможно я так и не угадал, что означает у Вас слово «задание».
— Ваше объяснение больше относится к коду. Но код не содержит каких-то особенных приемов, требующих объяснения. Достаточно объяснить алгоритм.
— Вы пишите «по формуле среднего арифметического». Если у Вас есть какие-то причины не приводить сложную формулу в тексте, то следует дать на нее ссылку. Но ведь это не тот случай?
Спасибо большое! Постаралась исправить недочеты
Стало намного лучше. Но текст объяснения нуждается в дальнейшей доработке.
1. Вы пишите «задача выполнима». Какая задача? В Вашем тексте это слово встречается только один раз — «Условие задачи». Эта задача выполнима? По дальнейшему смыслу понятно, что речь идет о пересадке пассажиров. Почему так и не написать? Вы можете снова попытаться найти новое слово, но в условии задачи это названо именно «пересадка». Боюсь у Вас нет другого выхода — придется именно пересадкой это и назвать. И уж заодно объясните почему должно быть кратно трем. Можете написать что-то про то, что рассадить нужно поровну?
2. В формуле лучше ставить нижние индексы — $b_1$.
Спасибо! Исправила
Текст пояснения идеален.
Зачтено.
Ура!