resister, Ну наверное сначала нужно выбрать наиболее близкие по значению элементы, потом уже посмотреть какой куда.
1. Как выбираются наиболее близкие? Сравниваем их попарно и ищем минимальную разность между ними. Я представляю себе это примерно так:
Code
-------------------------
min := abs(a[1]-a[2]);
x_1:= 1;
x_2:= 2;
inc(index);
For i := 1 to n-1 do
Begin
If (r[i] = true) then Continue;
For j := i+1 to n do
Begin
if (r[j] = true) then Continue;
if (abs(a[i]-a[j])<min) then
Begin
x_1 := i;
x_2 := j;
min := abs(a[i]-a[j]);
End;
End;
r[x_1] := true;
r[x_2] := true; {Чтобы не рассматривать повторно их}
if (a[x_1] >= a[x_2]) then
Begin
c[index] := a[x_1];
b[index] := a[x_2];
End
Else
Begin
c[index] := a[x_2];
b[index] := a[x_1];
End;
---------------------
Вот, все это нужно повторить n-1 раз, а последний раз взять 2 оставшихся элемента и все. Ну можно n раз повторить, тогда прога все сама сделает... Это предварительный код, который содержит логические и синтаксические ошибки. Так что правь сам.
Общая идея такова:
- ищем наименьшую разность, запоминаем эти числа.
- метим их позиции в массиве, чтобы потом не рассматривать.