Как сделать медиану 3 и 4 чисел в С#?

-6

Я новичок в С# и хотел попробовать, чтобы пользователь вводил 3 числа и получал медиану для него, а затем снова вводил 4 числа и получал другую медиану для этого, но я не знаю, как получить числа в числовом порядке, Люди сказали мне использовать либо массивы, либо переменные, но после прочтения немного об этом я до сих пор не знаю, как программировать числовой порядок. Если у кого есть советы, я бы очень признателен. Заранее спасибо.

спросил(а) 2017-10-11T16:31:00+03:00 2 года, 1 месяц назад
2
2 ответа
57

Если вы хотите сделать число чисел динамическим, вы можете сделать это (использует System.Linq):

public static double Median(IEnumerable<int> numbers)
{
if (numbers == null) throw new ArgumentNullException("numbers");

int[] ordered = numbers.OrderBy(i => i).ToArray();

if (ordered.Length == 0) return double.NaN;

if (ordered.Length % 2 == 0)
{
int half = ordered.Length / 2;
return (ordered[half] + ordered[half - 1]) / 2d;
}
return ordered[ordered.Length / 2];
}

Сначала он сортирует массив OrderBy() с OrderBy() а затем берет средний элемент коллекции. В случае четного количества предметов он принимает среднее значение из средних предметов. Если коллекция является пустой или пустой, метод возвращает 0.

ответил(а) 2017-10-11T16:41:00+03:00 2 года, 1 месяц назад
57

Медиана - это средний элемент упорядоченной последовательности:

https://en.wikipedia.org/wiki/Median

  int[] array = new int[] { 15, 7, 110, 20};

Array.Sort(array);

// 17.5
// if we have odd length (3 items) we just return the middle item
// in case of even length (4 items) we compute middle as a average of two "middle" items
double median = array.Length % 2 == 0
? (array[array.Length / 2] + array[array.Length / 2 - 1]) / 2.0
: array[array.Length / 2];

Итак, у нас есть

 7, 15, 20, 110       - sequence sorted
(15 + 20) / 2 = 17.5 - "middle" item is an average of 15 and 20

В случае 3 пунктов, скажем { 15, 7, 110 } мы имеем

 7, 15, 110           - sequence sorted
15 - middle item

Изменить: если троичный оператор ? : ? : в double median =...?... :...; double median =...?... :...; выглядит слишком сложным, его можно изменить на старый добрый, if... else (см. комментарии)

 ...

double median;

if (array.Length % 2 == 0)
median = (array[array.Length / 2] + array[array.Length / 2 - 1]) / 2.0;
else
median = array[array.Length / 2];

ответил(а) 2017-10-11T16:37:00+03:00 2 года, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема