как найти центральный элемент?
Необходимо определить произведение элементов массива, расположенных между максимальным и центральным элементами массива (предполагается что число элементов - нечётное и максимальный единственный. Если по какой-либо причине вычислить произведение не удается, выдать об этом сообщение с указанием причины. Я написал небольшой код, но он находит произведение максимального и минимального.. как найти центральный элемент?
class smth2
{
public void Main2()
{
int[] array = new int[10];
Random rand = new Random();
// заполняем массив случайными значениями
for (int i = 0; i < array.Length; i++)
array[i] = rand.Next(0, 10);
//
int max = array[0], min = array[0];
int maxIndex = 0, minIndex = 0;
// Находим максимальный и минимальный элемент вместе с индекчом
for (int i = 0; i < array.Length; i++)
{
if (array[i] >= max) { max = array[i]; maxIndex = i; }
if (array[i] <= min) { min = array[i]; minIndex = i; }
}
int kol = 0;
foreach (var item in array)
{
Console.WriteLine("{0} Индекс: {1}", item.ToString(), kol);
kol++;
}
Console.WriteLine("\nmax is {0} with index {1} and min is {2} with index {3}", max, maxIndex, min, minIndex);
// произведение
double value = 1;
for (int i = 0; i < array.Length; i++)
{
if (minIndex < maxIndex)
{
if (i > minIndex && i < maxIndex)
{
value = value * array[i];
}
}
else if (maxIndex < minIndex)
{
if (i < minIndex && i > maxIndex)
{
value = value * array[i];
}
}
}
Console.WriteLine("Произведение равно {0}", value);
Console.ReadLine();
}
}```
Ответы (2 шт):
Автор решения: Kunoichi
→ Ссылка
Находим значение "центрального" элемента:
var mV = array.[int.Parse(Math.Ceiling(array.Length / 2))]
Находим значение максимального:
var maxV = array.Max();
Находим произведение центрального и минимального:
var resut = mV * maxV;
Автор решения: Frehzy
→ Ссылка
int[] arr = new int[5] { 1, 10, 4, 6, 11 };
if (arr.Length % 2 == 0)
throw new ArgumentException("Массав должен иметь нечётное количество элементов");
int averageValue = arr[arr.Length / 2];
int averageIndex = Array.IndexOf(arr, averageValue);
var maxValue = arr.Max();
int maxIndex = Array.IndexOf(arr, maxValue);
try
{
var result = averageIndex <= maxIndex
? arr.Skip(averageIndex).Take(maxIndex - averageIndex + 1).Aggregate((x, y) => x * y)
: arr.Skip(maxIndex).Take(averageIndex - maxIndex + 1).Aggregate((x, y) => x * y);
Console.WriteLine(result);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.ReadKey();