Два ближайших числа

Дан список целых чисел, содержащий как минимум два элемента. Найдите в нём два ближайших элемента (то есть два элемента с минимальной абсолютной разностью). Изменять список при этом нельзя.

Входные данные:

В первой строке дано натуральное число N≤100 — размер массива. В следующей строчке даны N целых чисел, не превосходящих по модулю 231

Выходные данные:

Программа должна вывести два числа: индексы двух элементов списка, абсолютная величина разности которых минимальна.

Примеры:

Ввод:

6

7 0 4 2 5 9

Вывод:

2 4

angel496 angel496    2   12.04.2020 21:44    68

Ответы
21Алина111 21Алина111  21.01.2024 14:18
Добрый день! Давайте разберем эту задачу по шагам.

1. В начале нам необходимо прочитать данные входного массива. Первая строка содержит количество элементов в массиве, а во второй строке задан сам массив чисел. Для этого воспользуемся функцией `input()`, которая будет считывать строки с входными данными, и функцией `split()`, которая разделит строку на подстроки по пробелам и превратит их в список чисел. В нашем случае, нам нужно преобразовать строки с числами в список целых чисел. Вот код:

```python
n = int(input()) # считываем количество элементов в массиве
array = list(map(int, input().split())) # считываем массив чисел
```

2. Теперь у нас есть массив чисел, и мы хотим найти два ближайших элемента. Для этого создадим переменные `min_diff` и `min_indices` и инициализируем их так, чтобы они хранили пока еще несуществующее значение разности и индексы:

```python
min_diff = float('inf') # задаем наимаксимальную разность изначально
min_indices = (-1, -1) # задаем несуществующие индексы изначально
```

3. Теперь, чтобы найти два ближайших числа в массиве, пройдем циклом по всем парам элементов, вычислим разность между ними и обновим значения `min_diff` и `min_indices`, если текущая пара имеет меньшую разность:

```python
for i in range(n - 1): # проходим по всем парам элементов до предпоследнего
for j in range(i + 1, n): # для каждого i проходим по всем элементам справа от i
diff = abs(array[i] - array[j]) # вычисляем разность между элементами по модулю
if diff < min_diff: # если разность меньше текущего минимума
min_diff = diff # обновляем минимальную разность
min_indices = (i, j) # обновляем индексы пары элементов с минимальной разностью
```

4. Наконец, нужно вывести результат. Для этого просто выведем значения индексов, разделив их пробелом:

```python
print(min_indices[0], min_indices[1])
```

5. Полный код программы будет выглядеть так:

```python
n = int(input()) # считываем количество элементов в массиве
array = list(map(int, input().split())) # считываем массив чисел

min_diff = float('inf') # задаем наимаксимальную разность изначально
min_indices = (-1, -1) # задаем несуществующие индексы изначально

for i in range(n - 1): # проходим по всем парам элементов до предпоследнего
for j in range(i + 1, n): # для каждого i проходим по всем элементам справа от i
diff = abs(array[i] - array[j]) # вычисляем разность между элементами по модулю
if diff < min_diff: # если разность меньше текущего минимума
min_diff = diff # обновляем минимальную разность
min_indices = (i, j) # обновляем индексы пары элементов с минимальной разностью

print(min_indices[0], min_indices[1]) # выводим индексы пары элементов с минимальной разностью
```

Таким образом, при вводе примера из условия задачи:

```
6
7 0 4 2 5 9
```

Программа выведет:

```
2 4
```

И это будут индексы элементов `4` и `5` списка `7 0 4 2 5 9` с минимальной абсолютной разностью 1.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика