Нашел первый и максимальный элемент,но не могу понять как переставить элементы в обратном порядке - 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();
        }
    }
}

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы