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