Сна delphi пусть дана вещественная квадратная матрица порядка n. относительно элементов, расположенных в строках, начинающихся с отрицательного элемента, найдите суммы тех из них, которые расположены соответственно ниже, выше и на главной диагонали.
//PascalABC.NET 3.1 сборка 1200 begin var n := ReadInteger('n='); var a := MatrixRandom(n, n, -10, 10); println(a);
for var i := a.GetLowerBound(0) to a.GetUpperBound(0) do if a[i, a.GetLowerBound(1)] < 0 then begin var s1 := 0; var s2 := 0; var s3 := 0; for var j := a.GetLowerBound(1) to a.GetUpperBound(1) do if i < j then s1 += a[i, j] else if i = j then s2 += a[i, j] else if i > j then s3 += a[i, j]; writeln(i + ': ' + s1 + ', ' + s2 + ', ' + s3); end; end.
Так с наскоку увидеть перестановку не получилось, и для улучшения зрения сделана программка Возможные перестановки хранятся в массиве Xchng. В программе сделана проверка на две перестановки, что, по большому счёту избыточно, т.к. кратчайшее решение содержит всего одну перестановку. но дополнить программу проверками на 3 и 4 перестановку можно.
Если дальше завершить программу, то получим это: program HelloWorld; function ez(a: longint): boolean; var c: integer; begin ez := a >= 2; for c := 2 to trunc(sqrt(a)) do if a mod c = 0 then ez := false end; var i, k: integer; num: array [1 .. 100] of integer; begin for i := 0 to 99 do num[i+1] := i + 1; k := 0; i := 1; while k < 7 do begin if ez(num[i]) = true then k := k + 1; i := i + 2; end; write(num[i-2]); end. ответ 19
begin
var n := ReadInteger('n=');
var a := MatrixRandom(n, n, -10, 10);
println(a);
for var i := a.GetLowerBound(0) to a.GetUpperBound(0) do
if a[i, a.GetLowerBound(1)] < 0 then begin
var s1 := 0;
var s2 := 0;
var s3 := 0;
for var j := a.GetLowerBound(1) to a.GetUpperBound(1) do
if i < j then s1 += a[i, j]
else if i = j then s2 += a[i, j]
else if i > j then s3 += a[i, j];
writeln(i + ': ' + s1 + ', ' + s2 + ', ' + s3);
end;
end.