Предмет: Математика,
автор: unlucker4life
Записали выражение: $2014 - (2013) + 2012 - (2011) + … + 2 - (1)$ (знаки плюс и минус чередуются). Можно поменять местами любые два числа (не трогая знаки), а затем вычислить значение получившегося выражения.
Какое максимальное число можно получить таким образом (можно сделать только один обмен)? В качестве ответа укажите одно целое число.
Комментарий. Если поменять 2 и 1, получится такое выражение: $2014 - (2013) + 2012 - (2011) + … + 1 - (2)$.
Ответы
Автор ответа:
0
код
//PascalABC.NET версия 3.2, сборка 1389
//Если программа не запускается, то обновите версию
uses System;
const
n = 2014;
begin
var a := ArrGen(n, i -> i * Power(-1, i), 1);
Println(a);
var max := a.Sum();
for var i := 1 to n - 1 do
for var j := i + 1 to n do
begin
var b := Arr(a);
for var k := b.Low to b.High do
begin
if abs(b[k]) = i then
b[k] := sign(b[k]) * j
else if abs(b[k]) = j then
b[k] := sign(b[k]) * i;
end;
var sum := b.Sum();
if (max < sum) and (sum > 2000) then begin
Println(i, j, sum);
Println(b);
max := sum;
end;
end;
Println(max);
end.
Ответ
Обмен (2; 2013)
Сумма = 5029
//PascalABC.NET версия 3.2, сборка 1389
//Если программа не запускается, то обновите версию
uses System;
const
n = 2014;
begin
var a := ArrGen(n, i -> i * Power(-1, i), 1);
Println(a);
var max := a.Sum();
for var i := 1 to n - 1 do
for var j := i + 1 to n do
begin
var b := Arr(a);
for var k := b.Low to b.High do
begin
if abs(b[k]) = i then
b[k] := sign(b[k]) * j
else if abs(b[k]) = j then
b[k] := sign(b[k]) * i;
end;
var sum := b.Sum();
if (max < sum) and (sum > 2000) then begin
Println(i, j, sum);
Println(b);
max := sum;
end;
end;
Println(max);
end.
Ответ
Обмен (2; 2013)
Сумма = 5029
Похожие вопросы
Предмет: Математика,
автор: yuloyaa
Предмет: Английский язык,
автор: Elya2000M
Предмет: Математика,
автор: erikdanial37
Предмет: Литература,
автор: erksi
Предмет: Литература,
автор: Аноним