Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
5 / 5 / 1
Регистрация: 11.11.2019
Сообщений: 143
Записей в блоге: 2

Найти ближайший элемент

18.06.2020, 09:06. Показов 6995. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте

Есть такая задача: Дано два массива A и B, элементами которых являются целые числа. Массив A отсортирован в порядке убывания.
Для каждого элемента массива B найти наиболее близкое число к данному в массиве A. Если таких несколько, то вывести оба.

Например,
A = [65, 43, 23, 11, 7]
B = [3, 54, 23, 9, 65]

В результате получаем:
3 - 7
54 - 65 43
23 - 23
9 - 11 7
65 -65

Написал вот такой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
a = [65, 43, 23, 11, 7]
b = [3, 54, 23, 9, 65]
 
a.sort()
b.sort()
for i in range(len(b)):
    if b[i] < a[i]:
        print(str(b[i]) + ' -- ' + str(a[i]))
    if a[i] > b[i] > a[i - 1]:
        print(str(b[i]) + ' -- ' + str(a[i - 1]) + ', ' + str(a[i]))
    if b[i] == a[i]:
        print(str(b[i]) + ' -- ' + str(a[i]))
    if a[i] < b[i] < a[i + 1]:
        print(str(b[i]) + ' -- ' + str(a[i + 1]) + ', ' + str(a[i]))
В результате получаю:
3 -- 7
9 -- 11
9 -- 7, 11
23 -- 23
54 -- 65, 43
65 -- 65

Сочетание 9 -- 11 явно лишнее. Мне кажется, первый if не так работает. Помогите починить.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.06.2020, 09:06
Ответы с готовыми решениями:

Ближайший к числу элемент матрицы
Реализуйте функцию, принимающую на вход матрицу X и некоторое число a и возвращающую ближайший к числу элемент матрицы. Например, для X =...

Найти ближайший ноль
Условие задачи: Улица, на которой хочет жить Тимофей, имеет длину n, то есть состоит из n одинаковых идущих подряд участков. На каждом...

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

4
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
19.06.2020, 20:58
ага. а бинарный поиск тут при чем?
0
5 / 5 / 1
Регистрация: 11.11.2019
Сообщений: 143
Записей в блоге: 2
30.06.2020, 09:07  [ТС]
Переписал код
Python
1
2
3
4
5
6
7
8
9
10
a.sort()
b.sort()
print('a' + ' = ' + str(a))
print('b' + ' = ' + str(b))
for i in range(len(b)):
    for j in range(len(a)):
        if b[i] - a[j] == 0:
            print(str(b[i]) + ' -- ' + str(a[j]))
        if abs(b[i] - a[j]) == abs(b[i] - a[j - 1]):
            print(str(b[i]) + ' -- ' + str(a[j - 1]) + ', ' + str(a[j]))
На наборе
a = [65, 43, 23, 11, 7]
b = [1, 2, 3, 4, 5, 65]
не отрабатывает, не хватает условия. Не могу сообразить как его правильно написать, чтобы выводилось 65 -- 65, 5 -- 7.
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
30.06.2020, 13:07
Зачем сортировать A, если он уже отсортирован (в обратном порядке)
Зачем сортировать B, вы потеряете информацию о порядке следования элементов B, но никаких выгод не приобретёте.
eaa, вам намекнул, что нужен бинарный поиск. Для чего же тогда вам предъявили отсортированный список A?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
A = [65, 43, 23, 11, 7]
B = [3, 54, 23, 9, 65]
 
for b in B:
    if b >= A[0]:
        print(b, '-', A[0])
        continue
    if b <= A[-1]:
        print(b, '-', A[-1])
        continue
    i1 = 0
    i2 = len(A) - 1
    while i2 - i1 > 1:
        ii = (i1 + i2) // 2
        if A[ii] > b:
            i1 = ii
        elif A[ii] < b:
            i2 = ii
        else:
            i1 = ii
            break
    if b == A[i1]:
        print(b, '-', A[i1])
    elif b == A[i2]:
        print(b, '-', A[i2])
    else:
        print(b, '-', A[i1], A[i2])
1
 Аватар для Вадим Тукаев
311 / 292 / 116
Регистрация: 23.01.2018
Сообщений: 933
01.07.2020, 06:41
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
a = [65, 43, 23, 11, 7]
b = [3, 54, 23, 9, 65]
 
for i in b:
    bas = 0
    lim = len(a) - 1
    while lim > 0:
        p = bas + lim // 2
        if a[p] > i:
            bas = p + 1
            lim -= 1
        lim //= 2
    comp = 1
    if bas != 0:
        p = a[bas - 1] - i
        q = i - a[bas]
        comp = (p > q) - (p < q)
    print(("{0}", "{0} {1}", "{1}")[comp + 1].format(a[bas - 1], a[bas]))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.07.2020, 06:41
Помогаю со студенческими работами здесь

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

Найти ближайший элемент.
Написать функцию нахождения в массиве целых чисел элемента, ближайшего к значению второго фргумента типа int.. заранее благодарю

Найти ближайший элемент массива
Дан массив из 10 целых чисел. Определить среднее арифметическое элементов массива, а также значение элемента, ближайшего к среднему, и...

Найти элемент ближайший по значению к минимальному
В одномерном массиве A найти элемент ближайший по значению к минимальному. Нужно найти не минимальный, а ближайший к минимальному. ...

Найти элемент, ближайший к заданному числу
Прошу помощи в решении задачи на одномерные массивы для VBA Excel. Найти элемент массива (и его номер), ближайший к заданному числу.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru