Олимпиадные задачи по программированию. Ч. 2. Лучшие решения. Ускова О.Ф - 27 стр.

UptoLike

Формат выходных данных:
В каждой строке файла содержатся строки полученной матрицы A. Каждая
строка содержит N положительных вещественных чисел - значений
элементов соответствующей строки матрицы A.
Пример файлов входных и выходных данных:
INPUT.TXT
3
0 13.5 0
2.5 0 20
10 10 0
OUTPUT.TXT
0 1 0
0 0 0
0 0 0
Алгоритм решения
1. Подсчитаем баланс всех предприятий в отдельном массиве. Возможны
варианты:
а) предприятие никому ничего не должно (баланс = 0)
б) предприятие кому-то что-то должно (баланс < 0)
в) предприятию кто-то что-то должен (баланс > 0)
2. Находим 2 предприятия с балансами разных знаков.
3. Вычисляем сумму долга одного предприятия другому и запоминаем в
матрице.
Долг равен минимальному из двух чисел (балансов, взятых с
положительным знаком).
4. Изменяем баланс этих предприятий, предполагая что долг был
уплачен. Баланс у одного (или двух) предприятия стал = 0.
5. Если ещё остались предприятия с балансом <> 0 то возвращаемся к
пункту 2.
Program Plz1;
{Автор Колбешкин Д.М.}
Const MaxN = 50;
Var fin,fout:text;
i,j,N :integer;
t :real;
A : array[1..MaxN,1..MaxN] of real; {Матрица A}
B : array[1..MaxN] of real; {Баланс предприятий}
Begin
writeln (' Задача о неплатежах');
assign(fin,'input.txt');
assign(fout,'output.txt');
reset(fin);
rewrite(fout);
read(fin,N); {Кол-во предприятий}
for i:=1 to n do
for j:=1 to n do
read(fin,A[i,j]); {Заполняем матрицу A}
for i:=1 to N do
begin
t:=0;
for j:=1 to N do
t:=t+A[i,j]-A[j,i]; {Считаем баланс}
B[i]:=t;
end;
for i:=1 to N do