Оптимизировать код - C# (183068)
Формулировка задачи:
Написал программу, которая считывает данные из файла(вещественные числа), записывает данные в массив, находит минимальное, среднее и максимальное число и выводит в файл их порядковый номер. Как оптимизировать программу, чтобы время выполнения не выходило за рамки в 2 секунды?
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Globalization;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
string text = File.ReadAllText(@"in");
string[] numberStrings = text.Split(new char[] { ' ', '\n' }, StringSplitOptions.RemoveEmptyEntries);
short valuesCount = short.Parse(numberStrings[0]); // <<< количество элементов в массиве
float[] values = new float[valuesCount]; // <<< создание массива длиной valuesCount
for (short index = 0; index < valuesCount; ++index)
{
values[index] = float.Parse(numberStrings[index + 1], CultureInfo.InvariantCulture.NumberFormat); // <<< заполнение массива
}
using (StreamWriter sw = new StreamWriter(@"out"))
{
int min = 0;
int max = 0;
int average = 0;
float[] massive = new float[valuesCount];
for (short c = 0; c < values.Length; c++)
{
for (short i = 0; i < values.Length; i++) // <<< нахождение среднего числа
{
massive[i] = Math.Abs(values.Average() - values[i]);
}
for (short i = 0; i < massive.Length; i++)
{
if (massive[i] == massive.Min()) average = i + 1;
}
if (values[c] == values.Min()) // индекс минимального
{
min = c + 1;
}
if (values[c] == values.Max()) // индекс максимального
{
max = c + 1;
}
}
sw.Write("{0} {1} {2}", min, average, max); // вывод
}
}
}
}Решение задачи: «Оптимизировать код»
textual
Листинг программы
for (short c = 0; c < values.Length; c++)
* * * * * * * * {
* * * * * * * * * * for (short i = 0; i < values.Length; i++) // <<< нахождение среднего числа
* * * * * * * * * * * * {
* * * * * * * * * * * * * * massive[i] = Math.Abs(values.Average() - values[i]);
* * * * * * * * * * * * }
* * * * * * * * * * for (short i = 0; i < massive.Length; i++)
* * * * * * * * * * {
* * * * * * * * * * * * if (massive[i] == massive.Min()) average = i + 1;
* * * * * * * * * * }