Нашел первый и максимальный элемент,но не могу понять как переставить элементы в обратном порядке - C#

Узнай цену своей работы

Формулировка задачи:

Нужно переставить в обратном порядке элементы одномерного массива, расположенные между первым минимальным и последним максимальным элементом
Листинг программы
  1. static void Main(string[] args)
  2. {
  3. int min = 0, max = 0, el = 0, mx = 0;
  4. int[] mass = new int[10];
  5. Random a = new Random();
  6. for (int i = 0; i < 10; i++)
  7. {
  8. mass[i] = a.Next(10, 50);
  9. }
  10. Console.WriteLine();
  11. Console.Write("Исходный массив");
  12. Console.WriteLine();
  13. for (int i = 0; i < 10; i++)
  14. {
  15. Console.Write("{0,4}", mass[i]);
  16. }
  17. Console.WriteLine();
  18. int p, l;
  19. for (int i = 0; i < 10; i++)
  20. {
  21. if (mass[i] > mass[0])
  22. {
  23. max = mass[i];
  24. {
  25. p = i;
  26. if (mass[i] < min)
  27. {
  28. min = mass[i];
  29. l = i;
  30. mx = max;
  31. for (int g = l; g <= p / 2; g++)
  32. {
  33.  
  34. }
  35. }
  36. }
  37. }
  38. Console.Write("Преобразованный массив");
  39. Console.WriteLine();
  40. for (int h = 0; h < 10; h++)
  41. {
  42. Console.Write("{0,4}", mass[i]);
  43. }
  44. Console.ReadKey();
  45. }
  46. }
  47. }
  48. }

Решение задачи: «Нашел первый и максимальный элемент,но не могу понять как переставить элементы в обратном порядке»

textual
Листинг программы
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace ConsoleApp2
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             Random rnd = new Random();
  11.             int[] mass = Enumerable.Range(0, 10).Select(v => rnd.Next(10, 50)).ToArray();
  12.             Console.WriteLine("Исходный массив: " + String.Join(" ", mass));
  13.             int imin = mass.Select((v, i) => v == mass.Min() ? i + 1 : 0).OrderBy(v => v).Where(v => v != 0).First() - 1; //индекс первого минимального
  14.             int imax = mass.Length - mass.Reverse().Select((v, i) => v == mass.Max() ? i + 1 : 0).OrderBy(v => v).Where(v => v != 0).First();//индекс последнего максимального
  15.             if (imin < imax)
  16.             {
  17.                 int[] rev = mass.Skip(imin + 1).Take(imax - imin - 1).Reverse().ToArray();//выделяем нужные элементы и инвертируем
  18.                 int[] before = mass.Where((v, i) => i <= imin).ToArray();//элементы до минимального (включая минимальный)
  19.                 int[] after = mass.Where((v, i) => i >= imax).ToArray();//элементы после максимального (включая максимальный)
  20.                 mass = before.Concat(rev).ToArray().Concat(after).ToArray();//объединяем
  21.                 Console.WriteLine("Результат: "+String.Join(" ", mass));//выводим
  22.             }
  23.             else  Console.WriteLine("Минимальный стоит после максимального");
  24.             Console.ReadLine();
  25.         }
  26.     }
  27. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

6   голосов , оценка 3.833 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы