Почему код не верен? Python
Напишите программу, которая находит в массиве элемент, самый близкий по величине к данному числу.
Входные данные
В первой строке содержится список чисел — элементы массива (целые числа, не превосходящие 1000 по абсолютному значению).
Во второй строке вводится одно целое число x, не превосходящее 1000 по абсолютному значению.
Выходные данные
Вывести значение элемента массива, ближайшего к x. Если таких чисел несколько, выведите любое из них.
Примеры
Ввод 1 2 3 4 5
6
Вывод 5
Пример моего кода:
import sys
a=list(map(int,input().split()))
b=int(input())
c=[]
for i in a:
c.append(b-i)
for i in a:
if i==b:
print(b)
sys.exit()
if min(c)<0:
d=c.index(max(c))
print(a[d])
else:
d=c.index(min(c))
print(a[d])
В тесте пишет, что код выдает неверный ответ
Ответы (4 шт):
Я могу предложить такой вариант решения:
Алгоритм:
- Сортирую список чисел
- Итерируюсь по списку и нахожу первое превосходящее по значению число к заданному
b. - Нахожу соседей числа
b, исходя из наибольшего числа из пункта 2, и сравниваю их на близость к заданному числу. - Вывожу первое число или максимальное в списке
Реализация:
a = sorted(list(map(int, input().split())))
b = int(input())
res = []
for num, i in enumerate(a):
if i >= b:
if b - a[num - 1] > a[num] - b:
res.append(a[num])
else:
res.append(a[num - 1])
if res:
print(res[0])
else:
print(max(a))
Вот код:
import sys
a=list(map(int,input().split()))
b=int(input())
c=[]
for i in a:
c.append(abs(b-i))
d=c.index(min(c))
print(a[d])
abs - берет значение по модулю
У встроенной функции min есть необязательный аргумент key который принимает функцию определяющую порядок сравнения элементов:
a = [1,2,3,4,5,7,6,15]
b = 19
m = min(a, key=lambda x: abs(x-b)) # 15
Здесь элементы x сравниваются между собой по абсолютной разнице между ними и заданным значением b . То есть меньшим будет тот у которого эта разница меньше.
a = sorted(list(map(int, input().split())))
b = int(input())
print(min(a, key=lambda x: abs(x-b)))
вот полный код для этой задачи