Оптимизировать код поиска и замены элементов массива - C#
Формулировка задачи:
Добрый вечер! Подскажите,есть задача Задан Массив из N элементов. Найти все элементы этого массива,которые больше за указанное число k и заменить их на k. Если таких элементов найдено не было,то уменьшать число k на единицу то тех пор,пока невозможно будет заменить хотя бы 1 элемент.
Вот мой код,но мне нужно оптимизировать
подскажите правильно,как сделать это 1-2 циклами без поиска максимального значение в массиве. Спасибо заранее.
using System; namespace ConsoleApplication8 { class Program { static void ReadArray(int[] a)//Заполняем массив { bool error = true; Console.WriteLine("Заполняем массив. Введите значения"); do { try { for (int i = 0; i < a.Length; i++) { a[i] = int.Parse(Console.ReadLine()); } error = false; } catch (Exception r) { Console.WriteLine(r.Message); } } while (error); } static int N() { int N = 0; bool error = true; do { try { Console.WriteLine("Введите размер массива"); N = int.Parse(Console.ReadLine()); error = false; } catch (Exception e) { Console.WriteLine(e.Message); } } while (error||N<0); return N; }//Вводим N static void Logica(int[] a,int k) { int h = 0, c = 0, b = 0; for (int i = 0; i <= a.Length - 1; i++) { if (a[i] > k) { a[i] = k; h++; } } if (h == 0) { int max = a[0]; for (int i = 1; i < a.Length; i++) if (a[i] > max) { max = a[i]; } b = max; for (int f = b; f <= k; k--) { if (f == k) { c = k - 1; } } for (int i = 1; i <= a.Length - 1; i++) { if (a[i] >= max) { a[i] = c; } } } }//считаем сколько элементов изменили и присваивание k static void out1(int[] a) { Console.WriteLine("Масив буде таким"); for (int i = 0; i < a.Length; i++) Console.Write("{0,4} ", a[i]);//С помощью форматирующей строки вывод делаем елементов массива }//вывод static int Input() { bool error = true; int k=0; do { try { Console.WriteLine("Введите число k:"); k = int.Parse(Console.ReadLine()); error = false; } catch (Exception e) { Console.WriteLine(e.Message); } } while (error); return k; }//Ввод k static void Main(string[] args) { try { int k = Input(); int[] array = new int[N()]; ReadArray(array); Logica(array,k); out1(array); } catch (Exception exe) { Console.WriteLine(exe.Message); } } } }
if (h == 0) { int max = a[0]; for (int i = 1; i < a.Length; i++) if (a[i] > max) { max = a[i]; } b = max; for (int f = b; f <= k; k--) { if (f == k) { c = k - 1; } } for (int i = 1; i <= a.Length - 1; i++) { if (a[i] >= max) { a[i] = c; } } }
Решение задачи: «Оптимизировать код поиска и замены элементов массива»
textual
Листинг программы
using System; using System.Linq; class Program { static void Main() { int[] arr = Enumerable.Repeat(new Random(), 10).Select(rnd => rnd.Next(100)).ToArray(); Console.WriteLine(String.Join(", ", arr)); int k = 95; if (!arr.Any(n => n > k)) { k = arr.Max() - 1; } Console.WriteLine(k); arr = arr.Select(n => n > k ? k : n).ToArray(); Console.WriteLine(String.Join(", ", arr)); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д