D
DenisM
помогите пожалуйста со следующей задачей в Паскале: Разделить одномерный массив на 3 части, которые по возможности имеют минимальное расхождение сумм. Например: исходный массив - 1 2 3 4 5 6, полученые массивы - 6 1, 5 2, 3 4. Необязательно чтоб в полученном массиве было одинаковое количество чисел.
Я попробывал что-то сделать но у меня получается не так как надо
Я попробывал что-то сделать но у меня получается не так как надо
Код:
uses crt;
const
n = 5;
type
TArray = array [1..n] of Integer;
TResult = record
a, b: Integer;
end;
function Part(const arr: TArray; const _from, _to: Integer): Integer;
var
s, i: Integer;
begin
s := 0;
for i := _from to _to do
inc(s, arr[i]);
Part := s;
end;
procedure GetParts(const arr: TArray; var R: TResult);
var
a, b, delta, min: Integer;
begin
min := MaxInt;
for a := 1 to n - 2 do
for b := a + 1 to n - 1 do begin
DELTA :=
abs ( Part(arr, b + 1, n) - Part(arr, a + 1, b) ) +
abs ( Part(arr, b + 1, n) - Part(arr, 1, a) ) +
abs ( Part(arr, a + 1, b) - Part(arr, 1, a));
if DELTA < min then begin
min := DELTA;
R.a := a;
R.b := b;
end;
end;
end;
const
X: TArray = (1, 2, 3, 4, 5);
var
R: TResult;
begin
clrscr;
GetParts(X, R);
writeln('1->', R.a, ', ', R.a + 1, '->', R.b, ', ', R.b + 1, '->', n);
readln;
end.