Решение задачи Ближайшее число с Mccme
Напишите программу, которая находит в массиве элемент, самый близкий по величине к данному числу.
Код
Скопировать код
#include using namespace std; int main() < int n, t, k = 0, res, idx; cin >> n; vector a(n); for(int i = 0; i < n; ++i) cin >> a[i]; cin >> t; res = abs(t - a[0]); idx = a[0]; for(int i = 1; i < a.size(); ++i)< if(abs(t - a[i]) < res)< res = abs(t - a[i]); idx = a[i]; >> cout
         
Автор: Администратор
Python-сообщество
- Начало
- » Центр помощи
- » найти ближайшее число, меньше заданного, в списке
#1 Июль 1, 2014 14:50:40
vrabey От: Киев Зарегистрирован: 2013-04-17 Сообщения: 209 Репутация: 23 Профиль Отправить e-mail
найти ближайшее число, меньше заданного, в списке
например:
есть отсортированный список целых чисел:
sp = [0, 5, 19, 33, 56, 71, 75]
и есть случайное число
функция должна вернуть
написал так:
random_list = [0, 5, 19, 33, 56, 71, 75] def number_near(n): if n in random_list: return n random_list.append(n) random_list.sort() return random_list.pop(random_list.index(n) - 1) print number_near(59)
подскажите более оптимальный (правильный) вариант
#2 Июль 1, 2014 16:20:29
terabayt От: Киев Зарегистрирован: 2011-11-26 Сообщения: 1099 Репутация: 103 Профиль Отправить e-mail
найти ближайшее число, меньше заданного, в списке
a = [0, 5, 19, 33, 56, 71, 75] def f(n): if na[0]: return "n меньше всех" for i in a: if n i: return x x = i else: return "n больше всех" print f(59)
#3 Июль 1, 2014 16:23:40
terabayt От: Киев Зарегистрирован: 2011-11-26 Сообщения: 1099 Репутация: 103 Профиль Отправить e-mail
найти ближайшее число, меньше заданного, в списке
если не хотите создавать еще одну переменную, то можно так
a = [0, 5, 19, 33, 56, 71, 75] def f(n): if na[0]: return "n меньше всех" for i, j in enumerate(a): if n j: return a[i-1] else: return "n больше всех" print f(59)
#4 Июль 1, 2014 16:43:39
terabayt От: Киев Зарегистрирован: 2011-11-26 Сообщения: 1099 Репутация: 103 Профиль Отправить e-mail
найти ближайшее число, меньше заданного, в списке
может выглядит и не так красиво как у вас, но работает раза в 3 быстрее! может есть и более красивые методы, но все они сводятся к этому.
#5 Июль 1, 2014 17:15:11
vrabey От: Киев Зарегистрирован: 2013-04-17 Сообщения: 209 Репутация: 23 Профиль Отправить e-mail
найти ближайшее число, меньше заданного, в списке
terabayt
может выглядит и не так красиво как у вас, но работает раза в 3 быстрее
да спасибо действительно быстрее — чевото я перемудрил
думал если список например содержит 2000000 чисел а заданное число — 1999999,
то как то не рационально перебирать весь список,
но у меня получилось ещё менее рационально
#6 Июль 1, 2014 17:21:03
terabayt От: Киев Зарегистрирован: 2011-11-26 Сообщения: 1099 Репутация: 103 Профиль Отправить e-mail
найти ближайшее число, меньше заданного, в списке
оу, если у вас такой большой список, то можно использовать какието специальные алгоритмы. если вы думаете работать с таими большимим списками, напишите мне на почту, я оптимизирую алгоритм, будет еще быстрее работать.
Python ФКН: 10) Линейный поиск
Напишите программу, которая находит в массиве элемент, самый близкий по величине к данному числу.
Входные данные
В первой строке задается одно натуральное число N, не превосходящее 1000 – размер массива. Во второй строке содержатся N чисел – элементы массива (целые числа, не превосходящие по модулю 1000). В третьей строке вводится одно целое число x, не превосходящее по модулю 1000.
Выходные данные
Вывести значение элемента массива, ближайшее к x. Если таких чисел несколько, выведите любое из них.
Поиск ближайшего по величине числа в списке
Требуется найти ближайшее заданное число в некотором списке на Python 3. Есть ли какой-то встроенный модуль для таких целей? Или какой алгоритм стоит для этого выбрать?
Отслеживать
47.8k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 22 янв 2018 в 3:24
Якимов Герман Якимов Герман
105 1 1 серебряный знак 12 12 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
l = [5, 78, 45, 12, 56, 9999] def nearest(lst, target): return min(lst, key=lambda x: abs(x-target)) print(nearest(l, 52))
Отслеживать
ответ дан 22 янв 2018 в 5:24
20.4k 4 4 золотых знака 25 25 серебряных знаков 52 52 бронзовых знака
Понимаю, что вам могла не понравиться моя правка, но считаю что моя правка сделала ответ лучше. Рекомендуется 4 пробела под отступ, добавление пробела до и после арифметического оператора, а также, я считаю, что примеры данных и функции, что с ними работают нужно отделять, поэтому и перенес функцию выше. Плюс, больше примеров использования с наглядным результатом хуже не сделали бы — сразу было бы видно, что будет получено
22 янв 2018 в 11:43
Highly active question. Earn 10 reputation (not counting the association bonus) in order to answer this question. The reputation requirement helps protect this question from spam and non-answer activity.
- python
- python-3.x
- list
- поиск