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