Оптимизировать код поиска и замены элементов массива - C#

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

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

Добрый вечер! Подскажите,есть задача Задан Массив из N элементов. Найти все элементы этого массива,которые больше за указанное число k и заменить их на k. Если таких элементов найдено не было,то уменьшать число k на единицу то тех пор,пока невозможно будет заменить хотя бы 1 элемент.
Листинг программы
  1. using System;
  2. namespace ConsoleApplication8
  3. {
  4. class Program
  5. {
  6. static void ReadArray(int[] a)//Заполняем массив
  7. {
  8. bool error = true;
  9. Console.WriteLine("Заполняем массив. Введите значения");
  10. do
  11. {
  12. try
  13. {
  14. for (int i = 0; i < a.Length; i++)
  15. {
  16. a[i] = int.Parse(Console.ReadLine());
  17. }
  18. error = false;
  19. }
  20. catch (Exception r) {
  21. Console.WriteLine(r.Message);
  22. }
  23. } while (error);
  24. }
  25. static int N() {
  26. int N = 0;
  27. bool error = true;
  28. do
  29. {
  30. try
  31. {
  32. Console.WriteLine("Введите размер массива");
  33. N = int.Parse(Console.ReadLine());
  34. error = false;
  35. }
  36. catch (Exception e)
  37. {
  38. Console.WriteLine(e.Message);
  39. }
  40. } while (error||N<0);
  41. return N;
  42. }//Вводим N
  43. static void Logica(int[] a,int k)
  44. {
  45. int h = 0, c = 0, b = 0;
  46. for (int i = 0; i <= a.Length - 1; i++)
  47. {
  48. if (a[i] > k)
  49. {
  50. a[i] = k;
  51. h++;
  52. }
  53. }
  54. if (h == 0)
  55. {
  56. int max = a[0];
  57. for (int i = 1; i < a.Length; i++)
  58. if (a[i] > max)
  59. {
  60. max = a[i];
  61. }
  62. b = max;
  63. for (int f = b; f <= k; k--)
  64. {
  65. if (f == k)
  66. {
  67. c = k - 1;
  68. }
  69. }
  70. for (int i = 1; i <= a.Length - 1; i++)
  71. {
  72. if (a[i] >= max)
  73. {
  74. a[i] = c;
  75. }
  76. }
  77. }
  78. }//считаем сколько элементов изменили и присваивание k
  79. static void out1(int[] a)
  80. {
  81. Console.WriteLine("Масив буде таким");
  82. for (int i = 0; i < a.Length; i++)
  83. Console.Write("{0,4} ", a[i]);//С помощью форматирующей строки вывод делаем елементов массива
  84. }//вывод
  85. static int Input() {
  86. bool error = true;
  87. int k=0;
  88. do
  89. {
  90. try
  91. {
  92. Console.WriteLine("Введите число k:");
  93. k = int.Parse(Console.ReadLine());
  94. error = false;
  95. }
  96. catch (Exception e) {
  97. Console.WriteLine(e.Message);
  98. }
  99. } while (error);
  100. return k;
  101. }//Ввод k
  102. static void Main(string[] args)
  103. {
  104. try
  105. {
  106. int k = Input();
  107. int[] array = new int[N()];
  108. ReadArray(array);
  109. Logica(array,k);
  110. out1(array);
  111. }
  112. catch (Exception exe)
  113. {
  114. Console.WriteLine(exe.Message);
  115. }
  116. }
  117. }
  118. }
Вот мой код,но мне нужно оптимизировать
Листинг программы
  1. if (h == 0)
  2. {
  3. int max = a[0];
  4. for (int i = 1; i < a.Length; i++)
  5. if (a[i] > max)
  6. {
  7. max = a[i];
  8. }
  9. b = max;
  10. for (int f = b; f <= k; k--)
  11. {
  12. if (f == k)
  13. {
  14. c = k - 1;
  15. }
  16. }
  17. for (int i = 1; i <= a.Length - 1; i++)
  18. {
  19. if (a[i] >= max)
  20. {
  21. a[i] = c;
  22. }
  23. }
  24. }
подскажите правильно,как сделать это 1-2 циклами без поиска максимального значение в массиве. Спасибо заранее.

Решение задачи: «Оптимизировать код поиска и замены элементов массива»

textual
Листинг программы
  1. using System;
  2. using System.Linq;
  3.  
  4. class Program
  5. {
  6.     static void Main()
  7.     {
  8.         int[] arr = Enumerable.Repeat(new Random(), 10).Select(rnd => rnd.Next(100)).ToArray();
  9.         Console.WriteLine(String.Join(", ", arr));
  10.         int k = 95;
  11.         if (!arr.Any(n => n > k))
  12.         {
  13.             k = arr.Max() - 1;
  14.         }
  15.         Console.WriteLine(k);
  16.         arr = arr.Select(n => n > k ? k : n).ToArray();
  17.         Console.WriteLine(String.Join(", ", arr));
  18.     }
  19. }

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


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

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

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

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

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

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