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