Поиск ближайшего числа в массиве
Версия от 21:54, 27 августа 2019; Tatikoma (обсуждение | вклад) (Новая страница: «== Описание == Есть число N и массив с числами. Нужно найти в массиве ближайшее к N число. <br...»)
Содержание
Описание
Есть число N и массив с числами. Нужно найти в массиве ближайшее к N число. <br>Принцип работы скрипта: <br>Массив с числами разбивается на 2 массива. В одном числа, которые меньше N, во втором, которые больше N. <br>Из первого массива берётся последнее число, оно будет ближайшим из тех что меньше N. <br>Из второго берётся первое число, оно будет ближайшим из тех что больше N. <br>Из двух чисел выбирается ближайшее к N.
Версия
1.0
Минимальная версия UOPilot
2.38
Скрипт
set linedelay 0 // задержка между строк
log mode compact // компактный режим лога
init_arr %a 10 20 30 40 50 60 70 80 90 100 // массив с числами
sort_array %a // сортировка массива (нужна если массив не сортирован)
set #N random(120) // псевдослучайное число от 0 до 119 (число N)
set #z 0
set #z1 0
set size(%b)
set size(%b1)
for #i 1 size(%a)
if #N > %a [#i]
set #z #z + 1
set %b [#z] %a [#i]
else
set #z1 #z1 + 1
set %b1 [#z1] %a [#i]
end_if
end_for
if size(%b) != 0 and size(%b1) != 0
set #min #N - %b [size(%b)]
set #max %b1 [1] - #N
if #min < #max // если заменить на: if #min <= #max, то, к примеру, 35 будет ближе к 30, чем к 40
set #x %b [size(%b)]
else
set #x %b1 [1]
end_if
else
if size(%b) = 0
set #x %a [1]
else
set #x %a [size(%a)]
end_if
end_if
log N = #N, ближайшее число: #x
// set #pos indexof(%a (#x)) // если нужно узнать позицию ближайшего числа в массиве
// log Позиция числа в массиве: #pos
end_script
Смотрите также
Массивы <br>Load_array <br>Save_array <br>If <br>For