Поиск по этому блогу

четверг, 16 февраля 2017 г.

Маршрутное такси 2

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

 Задача:

В час пик на остановку одновременно подъехали три маршрутных такси, следующие по одному маршруту, в которые тут же набились пассажиры. Водители обнаружили, что количество людей в разных маршрутках разное, и решили пересадить часть пассажиров так, чтобы в каждой маршрутке было поровну пассажиров. Требуется определить, какое наименьшее количество пассажиров придется при этом пересадить.

Формат входных данных
Во входном файле записано три натуральных числа, не превосходящих 100 - количества пассажиров в первой, второй и третьей маршрутках соответственно.
Формат выходных данных
В выходной файл выведите одно число - наименьшее количество пассажиров, которое требуется пересадить. Если это невозможно, выведите слово IMPOSSIBLE (заглавными буквами).
Примеры
b_in.txt
b_out.txt
1 2 3
1
99 100 100
IMPOSSIBLE
Решение.
var
m, n, k,P,p1,p2,p3,s, sp:integer;
f,f1:text;
begin
{Открываем файлы для чтения исходных данных b_in.txt и записи результатаb_out.txt }
   assign(f, ‘b_in.txt’);
   reset(f);
   assign(f1,’ b_out.txt’);
   rewrite(f1);
   reladln(m,n,k);
   s:=m+n+k;{Находим общее количество пассажиров}
{Проверяем на кратность 3}
   if s mod 3 <>0 then
                   Write(f1,’ IMPOSSIBLE’)
   else
      begin
{Находим среднее число пассажиров, переводя результат в целое число с помощью функции trunk()}
         sp:=trunc((m+n+k)/3);
{Находим разности пассажиров}
         p1 = m – sp; 
         p2 = n – sp; 
         p3 = k – sp;
{Находим количество пересадок, где abs()-модуль}
         Р:=(abs(p1)+abs(p2)+abs(p3))/2;
         Write(f1,P);
      end;
{Закрываем файлы}
    close(f); close9f1);
end.

Если обнаружите ошибку, опишите ее в комментарии под записью. Буду признателен за уточнение и с радостью ее исправлю.

Комментариев нет:

Отправить комментарий