Задача
У годину пік на зупинку одночасно під’їхали три маршрутних таксі, які слідують по одному маршруту, в які тут же набилися пасажири. Водії виявили, що кількість людей у різних маршрутках різна, і вирішили пересадити частину пасажирів так, щоб у кожній маршрутці було порівну пасажирів. Потрібно визначити, яку найменшу кількість пасажирів доведеться при цьому пересадити.
Вхідні дані
Три натуральних числа, що не перевищують [latex]100[/latex] — кількості пасажирів у першій, другій і третій маршрутках відповідно.
Вихідні дані
Виведіть одне число — найменшу кількість пасажирів, яку потрібно пересадити. Якщо це неможливо, виведіть слово [latex]IMPOSSIBLE[/latex] (великими літерами).
Тести
Вхідні дані | Вихідні дані |
[latex]1[/latex] [latex]1[/latex] [latex]4[/latex] | [latex]2[/latex] |
[latex]1[/latex] [latex]2[/latex] [latex]4[/latex] | [latex]IMPOSSIBLE[/latex] |
[latex]1[/latex] [latex]3[/latex] [latex]5[/latex] | [latex]2[/latex] |
[latex]9[/latex] [latex]3[/latex] [latex]9[/latex] | [latex]4[/latex] |
Код програми
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#include <iostream> #include <cmath> using namespace std; int main() { int m1 , m2 , m3 , x; cin >> m1 >> m2 >> m3; if ( ( m1 + m2 + m3 ) % 3 == 0 ) { if ( m1 != m2 and m1 != m3 and m2 != m3 ) { cout << ( max ( max ( m1 , m2 ) , m3 ) - ( ( m1 + m2 + m3 ) / 3 ) ); } else if ( m1 == m2 ) { int x; x = ( m3 - ( m1 + m2 + m3 ) / 3 ); if ( x < 0 ) { cout << -x; } else cout<<x; } else if ( m1 == m3 ) { int x; x = ( m2 - ( m1 + m2 + m3 ) / 3 ); if ( x < 0 ) { cout << -x; } else cout << x; } else if ( m2 == m3 ) { int x; x = ( m1 - ( m1 + m2 + m3 ) / 3 ); if ( x < 0 ) { cout << -x; } else cout << x; } } else cout << "IMPOSSIBLE"; return 0; } |
Рішення завдання
Спочатку відріжемо усі варіанти при яких розподілити пасажирів порівну не вийде так, що коли іх загальна кількість не ділиться націло на [latex]3[/latex] виводимо [latex]IMPOSSIBLE[/latex]. Коли розподілити пасажирів можна, розглядаємо [latex]4[/latex] випадки : коли у різних маршрутках кількість людей різна та коли у будь-яких двох маршрутках кількість однакова. Коли кількість різна, від максимальної кількості людей у трьох маршрутках віднімаємо число, яке дорівнює [latex]{{1}\over{3}}[/latex] від загальної кількості людей(у кінці ми маємо отримати це число, як кількість пасажирів у всіх маршрутних таксі), коли у двох маршрутках кількість однакова , то від кількості людей(у маршрутці, де іх більше або менше) віднімаємо число, яке дорівнює [latex]{{1}\over{3}}[/latex] від загальної кількості людей. Якщо відповідь менше [latex]0[/latex] то помножуюмо на [latex]-1[/latex].
Посилання
Умова завдання на e-olymp.com.
Код рішення на ideone.com.
У Вас вийшов алгоритм з великою кількістю перевірок, хоча його можна написати більш лаконічно. Спробуйте скористатися знанням того, скільки людей має їхати в кожній маршрутці, якщо загальна кількість пасажирів кратна трьом.
Ви не вірно оформили формулу з дробами. Має бути за допомогою \frac
Дякую)
Я что-то увлекся проверкой и нечаянно решил задачу. У меня получилось так
Давайте оставим Ваш код как есть. Чтобы не выбрасывать мой.
Но [latex]\frac{1}{3}[/latex] всё же поправьте, пожалуйста.