Использование метода перебора
Рассмотрим примеры использования метода перебора. Метод заключается в переборе всех элементов с помощью цикла и анализа значений согласно поставленной задачи.
Пример 1. Нахождение количества элементов массива, равных числу b: k:=0; for i:=1 to n do if a[i]=b then k:=k+1;
Пример 2. Дано N чисел на координатной прямой. Определите пару чисел, наиболее близких друг к другу. Выведите на экран расстояние между ними и их номера.
Возможный алгоритм решения.
1. Задаем числа, которые будем хранить в массиве. read(n); for i:=1 to n do read(a[i]);
2. Нужно запоминать возможное наименьшее расстояние и номера чисел в порядке их ввода. Зададим начальные значения. Пусть наименьшее между первой и второй. Высчитаем расстояние и запомним номера. d:=abs(a[1]-a[2]);
3. Выполняем обработку информации, используя перебор элементов циклом в цикле.
for i:=1 to n-1 do for j:=i+1 to n do if abs(a[i]-a[j]) < d begin n1:=i; n2:=j; d:=abs(a[i]-a[j]); end; writeln(d); writeln(n1,' ',n2);
Внешним циклом по i делаем перебор для всех чисел массива от первого до предпоследнего. Для каждого выбранного числа (i-го элемента) делаем перебор циклом по j от следующего после i-го до последнего, определяя и анализируя расстояние между ними. Используем функцию abs (модуль), так как разность может быть и отрицательной, а расстояние всегда положительное. При выполнении условия (нахождения меньшего расстояния) запоминаем и номера элементов.
Полный текст программы: Var a : array[1..100] of real; i,j,n,n1,n2 : integer; d : real; Begin
read(n); for i:=1 to n do read(a[i]);
d:=abs(a[1]-a[2]); n1:=1; n2:=2;
for i:=1 to n-1 do for j:=i+1 to n do if abs(a[i]-a[j]) < d begin n1:=i; n2:=j; d:=abs(a[i]-a[j]); end;
writeln(d); writeln(n1,' ',n2); end.
|