// PascalABC.NET 3.3, сборка 1599 от 17.12.2017 // Внимание! Если программа не работает, обновите версию!
procedure Astento; begin var T:=Arr(-2,3,-1,4,-5,2,1,0,1,2,1,-3,5); var s:=T.OrderBy(p->Abs(p)); // последовательность памяти не занимает Writeln('Сумма двух наименьших по модулю: ',s.Take(2).Sum); Writeln('Сумма двух наибольших по модулю: ',s.TakeLast(2).Sum) end;
begin Astento end.
Результат Сумма двух наименьших по модулю: -1 Сумма двух наибольших по модулю: 0
Замечание: в данном случае "ранжированная" последовательность была такой: 0 -1 1 1 1 -2 2 2 3 -3 4 -5 5
max = a[0]+a[n-1]; min = a[0]*a[n/2]; for (int i = 1; i<n/2; i++){ if (a[i]+a[n-i-1] > max) max = a[i]+a[n-i-1]; if (a[i]*a[n/2+i] < min) min = a[i]*a[n/2+i]; } cout << "max = " << max << "\n"; cout << "min = " << min << "\n"; return 0; }
Пример (для n=10): -19.29 30.99 -15.37 26.41 3.65 13.45 29.28 4.28 30.51 -10.36 max = 61.50 min = -259.43
// Внимание! Если программа не работает, обновите версию!
procedure Astento;
begin
var T:=Arr(-2,3,-1,4,-5,2,1,0,1,2,1,-3,5);
var s:=T.OrderBy(p->Abs(p)); // последовательность памяти не занимает
Writeln('Сумма двух наименьших по модулю: ',s.Take(2).Sum);
Writeln('Сумма двух наибольших по модулю: ',s.TakeLast(2).Sum)
end;
begin
Astento
end.
Результат
Сумма двух наименьших по модулю: -1
Сумма двух наибольших по модулю: 0
Замечание: в данном случае "ранжированная" последовательность была такой: 0 -1 1 1 1 -2 2 2 3 -3 4 -5 5