Вообще, это очень похоже на "медианное среднее"
Т.е. при помощи циклов и условных операторов, чтобы было понятно как это работает, чтобы не было скрытых действий таких, как myArray.Max. или myArray.Min.
Я не хочу переизобретать простые операции, так что развернёшь их сам.
using System;
using System.Collections.Generic;
using System.Linq;
var array = new[] {3, 10, 16, 2, 8};
var result = FindMediumPoint(array);
Console.WriteLine(string.Join(" ", result));
static IEnumerable<int> FindMediumPoint(int[] sequence)
{
var min = sequence.Min(); // Минимум
var max = sequence.Max(); // Максимум
var diff = max - min; // Разброс между минимумом и максимумом
var avg = diff / 2; // Середина "Разброса"
var center = min + avg;
var actualCenterDiffs = sequence
.Select(number => number - center) // Находим отклонение числа
.GroupBy(Math.Abs) // Группируем те числа, у которых одинаковое абсолютное отклонение
.OrderBy(x => x.Key) // Сортируем в порядке увеличения отклонения
.First(); // Берём первое по порядку (минимальное)
return actualCenterDiffs
.Select(diff => diff + center); // Применяем отклонение к найденному центру;
}
В коде алгоритм в принципе выглядит так, как я бы решал самостоятельно.