Поиск ближайшего числа в массиве: различия между версиями

Материал из UoPilot
Перейти к навигации Перейти к поиску
(Новая страница: «== Описание == Есть число N и массив с числами. Нужно найти в массиве ближайшее к N число. <br...»)
 
 
Строка 1: Строка 1:
 
== Описание ==
 
== Описание ==
 
Есть число N и массив с числами. Нужно найти в массиве ближайшее к N число.
 
Есть число N и массив с числами. Нужно найти в массиве ближайшее к N число.
&lt;br>Принцип работы скрипта:
+
<br>Принцип работы скрипта:
&lt;br>Массив с числами разбивается на 2 массива. В одном числа, которые меньше N, во втором, которые больше N.
+
<br>Массив с числами разбивается на 2 массива. В одном числа, которые меньше N, во втором, которые больше N.
&lt;br>Из первого массива берётся последнее число, оно будет ближайшим из тех что меньше N.
+
<br>Из первого массива берётся последнее число, оно будет ближайшим из тех что меньше N.
&lt;br>Из второго берётся первое число, оно будет ближайшим из тех что больше N.
+
<br>Из второго берётся первое число, оно будет ближайшим из тех что больше N.
&lt;br>Из двух чисел выбирается ближайшее к N.
+
<br>Из двух чисел выбирается ближайшее к N.
  
 
== Версия ==
 
== Версия ==
Строка 36: Строка 36:
 
     set #min #N - %b [size(%b)]
 
     set #min #N - %b [size(%b)]
 
     set #max %b1 [1] - #N
 
     set #max %b1 [1] - #N
     if  #min &lt; #max              // если заменить на: if  #min &lt;= #max, то, к примеру, 35 будет ближе к 30, чем к 40
+
     if  #min < #max              // если заменить на: if  #min <= #max, то, к примеру, 35 будет ближе к 30, чем к 40
 
         set #x %b [size(%b)]
 
         set #x %b [size(%b)]
 
     else
 
     else
Строка 55: Строка 55:
 
== Смотрите также ==
 
== Смотрите также ==
 
[[Массивы]]
 
[[Массивы]]
&lt;br>[[Load_array]]
+
<br>[[Load_array]]
&lt;br>[[Save_array]]
+
<br>[[Save_array]]
&lt;br>[[If]]
+
<br>[[If]]
&lt;br>[[For]]
+
<br>[[For]]
 
== Первоисточник ==
 
== Первоисточник ==
  
 
[[Категория:Библиотека скриптов]]
 
[[Категория:Библиотека скриптов]]

Текущая версия на 11:36, 28 августа 2019

Описание

Есть число 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

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