![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Подскажите пожалуйста...
есть 2 последовательности положительных целых чисел, их размеры могут совпадать а могут и нет... например 1. 23 25 36 45 2. 18 20 31 нужно из этих последовательностей выбрать пары чисел, коорые будут удовлетворять условию например числа разность которых не превышает 5. причем значения из одной или второй последовательности могут встречаться в паре лишь один раз.. как это можно реализовать? если через массив, то как будет происходить сравнение если они разные по длине? или может через множество??? но как тогда добиться того чтобы значения встречались лишь один раз? заранее благодарна... |
|
#2
|
||||
|
||||
|
2 массива, вложенный цикл, числа которые попали в пару заменяешь на -1 чтобы повторно не использовать - все решение.
|
|
#3
|
||||
|
||||
|
спасибо : )
|
|
#4
|
|||
|
|||
|
Отброшу сейчас рассмотрение типа данных (приведу пример StringGrid для наглядности) - можно использовать динамические массивы, а также будем считать последовательности упорядоченными. Тогда я бы делал один цикл, но в нём прогонял 2 индекса массивов (даже три, если учитывать массив результата) параллельно.
Код:
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
bEnd: Boolean = false;
i: Integer = 1;
j: Integer = 1;
k: Integer = 1;
A, B: Integer;
maxI: Integer = 4;
maxj: Integer = 3;
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[1,1]:= '23';
StringGrid1.Cells[1,2]:= '25';
StringGrid1.Cells[1,3]:= '36';
StringGrid1.Cells[1,4]:= '45';
StringGrid1.Cells[2,1]:= '18';
StringGrid1.Cells[2,2]:= '20';
StringGrid1.Cells[2,3]:= '31';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
while not bEnd do
begin
A:= StrToInt(StringGrid1.Cells[1, i]);
B:= StrToInt(StringGrid1.Cells[2, j]);
if (Abs(A - B) <= 5) then
begin // i++, j++, k++
StringGrid1.Cells[3, k]:= IntToStr(A);
StringGrid1.Cells[4, k]:= IntToStr(B);
Inc(k);
if (i = maxI) or (j = maxJ) then
bEnd:= true
else
begin
Inc(i); Inc(j);
end
end
else if (A < B) then
begin // i++
if i = maxI then
bEnd:= true
else
Inc(i);
end
else
begin // j++
if j = maxJ then
bEnd:= true
else
Inc(j);
end;
end;
end;
end.Последний раз редактировалось AlexSku, 26.09.2008 в 11:29. |