Нашел первый и максимальный элемент,но не могу понять как переставить элементы в обратном порядке - C#
Формулировка задачи:
Нужно переставить в обратном порядке элементы одномерного массива,
расположенные между первым минимальным и последним максимальным элементом
static void Main(string[] args)
{
int min = 0, max = 0, el = 0, mx = 0;
int[] mass = new int[10];
Random a = new Random();
for (int i = 0; i < 10; i++)
{
mass[i] = a.Next(10, 50);
}
Console.WriteLine();
Console.Write("Исходный массив");
Console.WriteLine();
for (int i = 0; i < 10; i++)
{
Console.Write("{0,4}", mass[i]);
}
Console.WriteLine();
int p, l;
for (int i = 0; i < 10; i++)
{
if (mass[i] > mass[0])
{
max = mass[i];
{
p = i;
if (mass[i] < min)
{
min = mass[i];
l = i;
mx = max;
for (int g = l; g <= p / 2; g++)
{
}
}
}
}
Console.Write("Преобразованный массив");
Console.WriteLine();
for (int h = 0; h < 10; h++)
{
Console.Write("{0,4}", mass[i]);
}
Console.ReadKey();
}
}
}
}Решение задачи: «Нашел первый и максимальный элемент,но не могу понять как переставить элементы в обратном порядке»
textual
Листинг программы
using System;
using System.Linq;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
int[] mass = Enumerable.Range(0, 10).Select(v => rnd.Next(10, 50)).ToArray();
Console.WriteLine("Исходный массив: " + String.Join(" ", mass));
int imin = mass.Select((v, i) => v == mass.Min() ? i + 1 : 0).OrderBy(v => v).Where(v => v != 0).First() - 1; //индекс первого минимального
int imax = mass.Length - mass.Reverse().Select((v, i) => v == mass.Max() ? i + 1 : 0).OrderBy(v => v).Where(v => v != 0).First();//индекс последнего максимального
if (imin < imax)
{
int[] rev = mass.Skip(imin + 1).Take(imax - imin - 1).Reverse().ToArray();//выделяем нужные элементы и инвертируем
int[] before = mass.Where((v, i) => i <= imin).ToArray();//элементы до минимального (включая минимальный)
int[] after = mass.Where((v, i) => i >= imax).ToArray();//элементы после максимального (включая максимальный)
mass = before.Concat(rev).ToArray().Concat(after).ToArray();//объединяем
Console.WriteLine("Результат: "+String.Join(" ", mass));//выводим
}
else Console.WriteLine("Минимальный стоит после максимального");
Console.ReadLine();
}
}
}