PascalABC.NET 3.4.0, сборка 1671 от 31.05.2018
Внимание! Если программа не работает, обновите версию!
begin
var n:=36;
var a:=ArrRandom(n,-50,50); a.Println;
var n4:=n div 4;
var (s1,s2):=a.Select((v,i)->(v,i)).TakeLast(n4).Where(t->t[0]<>0)
.Slice(1,2).OrderByDescending(t->1/t[0]).UnZipTuple;
foreach var t in s1.ZipTuple(s2.Sorted) do a[t[1]]:=t[0];
a.Println
end.