Позвольте мне немного перефразировать этот вопрос. У вас есть очки p1,p2,p3,p4,p5
такие, что
0 <= p_i <= 480
Вы хотите найти точку x
такую, что
0 <= x <= 480
, которая максимизирует функцию
min_{x} ( |p1-x| + |p2-x| + |p3-x| + |p4-x| + |p5-x| )
Если это ваша цель (и мне не ясно, так оно или должно быть), то вы можете решить эту проблему, проверив, какое из следующих потенциальных значений x
максимально увеличивает расстояние:
0 , p1/2 , p1 + (p2-p1)/2 , p2 + (p3-p2)/2 , ... , p5 + (480-p5)/2
это предполагает 0 <= p1 <= p2 <= p3 <= p4 <= p5 <= 480
. Какой из различий больше, тем ответом следует выбрать.
Например, для
{123,450,0,0,0}
ответ 123 + (450-123)/2
.
Для
{150,320,90,0,0}
ответ 150 + (320-150)/2
Чтобы кодировать это в Objective-C, вам нужна функция, которая возвращает index от максимальной записи массива. Возьмем для ввода значение p1,p2,...,p5
. Сортируйте их в порядке возрастания, добавьте 0
слева и 480
справа. Затем создайте новый массив длиной на единицу меньше, что даст последовательные различия, например, {p1-p0, p2-p1, ..., p6-p5}
, где p0 = 0
и p6 = 480
. Наконец, получите индекс максимума этого нового массива, назовите его i
и верните оптимальную позицию p_i + (p(i+1)-p_i)/2
.
* * Пример 1 042:
вход : {150,320,90,0,0}
переставить на {0 , 0 , 0 , 90 , 150 , 320 , 480}
Разностный массив {0 , 0 , 90 , 60 , 170 , 160}
максимум по индексу 4
ответ 150 + (320-150)/2