// PascalABC.NET 3.2, сборка 1447 от 22.05.2017 // Внимание! Если программа не работает, обновите версию!
begin var n:=ReadInteger('Количество строк в массиве:'); var m:=ReadInteger('Количество колонок в массиве:'); Writeln('*** Исходный массив [',n,',',m,'] ***'); var a:=MatrRandom(n,m,-99,99); a.Println(5); Writeln(5*a.ColCount*'-'); a.Cols.Select(x->Format('{0,5}',x.Where(y->y<0).Sum)).Print(''); Println(' - суммы отрицательных'); end.
Количество путей до города Х = количество путей добраться в любой из тех городов, из которых есть дорога в Х. При этом, если путь не должен проходить через какой-то город, нужно просто не учитывать этот город при подсчёте сумм. А если город, наоборот, обязательно должен лежать на пути, тогда для городов, в которые из нужного города идут дороги, в суммах нужно брать только этот город.
С этого наблюдения посчитаем последовательно количество путей до каждого из городов:
А = 1.
Б = А = 1.
Г = А + Б = 2.
Д = А = 1.
В = Б + Г = 3.
Е = Г + Д = 3.
Ж = Е = 3. (В и Г не учитываем, поскольку в этих вершинах не проходим через Е).
// Внимание! Если программа не работает, обновите версию!
begin
var n:=ReadInteger('Количество строк в массиве:');
var m:=ReadInteger('Количество колонок в массиве:');
Writeln('*** Исходный массив [',n,',',m,'] ***');
var a:=MatrRandom(n,m,-99,99);
a.Println(5); Writeln(5*a.ColCount*'-');
a.Cols.Select(x->Format('{0,5}',x.Where(y->y<0).Sum)).Print('');
Println(' - суммы отрицательных');
end.
Пример
Количество строк в массиве: 5
Количество колонок в массиве: 9
*** Исходный массив [5,9] ***
-43 -96 34 82 3 92 -59 31 35
65 94 76 66 90 -39 26 -24 83
73 -92 94 -94 44 -35 -66 87 -46
90 56 -37 -60 -9 94 9 -76 -58
-16 97 65 -21 -86 64 -20 46 -26
-59 -188 -37 -175 -95 -74 -145 -100 -130 - суммы отрицательных
Объяснение:
Количество путей до города Х = количество путей добраться в любой из тех городов, из которых есть дорога в Х. При этом, если путь не должен проходить через какой-то город, нужно просто не учитывать этот город при подсчёте сумм. А если город, наоборот, обязательно должен лежать на пути, тогда для городов, в которые из нужного города идут дороги, в суммах нужно брать только этот город.
С этого наблюдения посчитаем последовательно количество путей до каждого из городов:
А = 1.
Б = А = 1.
Г = А + Б = 2.
Д = А = 1.
В = Б + Г = 3.
Е = Г + Д = 3.
Ж = Е = 3. (В и Г не учитываем, поскольку в этих вершинах не проходим через Е).
К = Ж = 3.
Н = Ж = 3.
М = Ж + Н = 6.
Л = К + Ж + М = 12.
П = К + Л + М = 21.