Поиск ближайшего числа в массиве

Материал из UoPilot
Перейти к навигации Перейти к поиску

Описание

Есть число N и массив с числами. Нужно найти в массиве ближайшее к N число.
Принцип работы скрипта:
Массив с числами разбивается на 2 массива. В одном числа, которые меньше N, во втором, которые больше N.
Из первого массива берётся последнее число, оно будет ближайшим из тех что меньше N.
Из второго берётся первое число, оно будет ближайшим из тех что больше N.
Из двух чисел выбирается ближайшее к 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

Смотрите также

Массивы
Load_array
Save_array
If
For

Первоисточник