1 / 1 / 0
Регистрация: 19.07.2018
Сообщений: 108
1

Как оптимизировать прогу по времени и памяти?

15.10.2018, 22:37. Показов 636. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
 
namespace Pomenitmest
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            short max, tmp, sp= 0 ;
            short N = Convert.ToInt16(Console.ReadLine());
            short [] arr = new short[N];
            if (N < 1000)
            {
 
                for (int i = 0; i < arr.Length; i++)
                    arr[i] = Int16.Parse(Console.ReadLine());
                max = arr[0];
                for (short i = 0; i < arr.Length; i++)
                {
                    if (arr[i] > max)
                    {
                        max = arr[i];
                        sp = i;
                    }
                }
                tmp = arr[0];
                arr[0] = arr[sp];
                arr[sp] = tmp;
                for (int i = 0; i < arr.Length; i++)
                    Console.Write(arr[i]);
                
            }
            else
                Console.WriteLine("Error");
            Console.ReadKey();
        }
    }
}
Добавлено через 20 секунд
Требуется поменять местами первый элемент массива с максимальным.

Входные данные
В первой строке вводится одно натуральное число, не превосходящее 1000 – размер массива. Во второй строке задаются N чисел – элементы массива (целые числа, не превосходящие по модулю 1000).

Выходные данные
Вывести получившийся массив. Если максимальных элементов несколько, требуется поменять первый из них.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.10.2018, 22:37
Ответы с готовыми решениями:

Как оптимизировать потребление памяти?
Что можно отключить? Как вообще оптимизировать нагрузки?

Как можно оптимизировать этот код по времени исполнения?
Добрый день уважаемые форумчане. Имеется такой код. У меня в файле 110 000 строк, и...

Как убрать прогу из памяти?
Каким образом можно сделать, чтобы после закрытия всех форм программа освобождала занимаемое...

Конкатенация потребляет много памяти, как можно оптимизировать?
Конкатенация потребляет много памяти. Если учесть, что символ занимает 2 байта, то результирующая...

16
Эксперт .NET
17751 / 12906 / 3374
Регистрация: 17.09.2011
Сообщений: 21,181
15.10.2018, 22:41 2
Maksat333, ну по времени можете один обход убрать, если находить максимальный элемент в цикле заполнения.
Считали - сразу проверили.

Добавлено через 1 минуту
Плюс у вас баг в условии: не превосходящее - это меньшее или равное.
1
1 / 1 / 0
Регистрация: 19.07.2018
Сообщений: 108
16.10.2018, 21:02  [ТС] 3
переписал прогу,но все равно выдает ошибку
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
 
namespace Pomenitmest
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            int m= 0;
            int [] arr = new int[1000];
            int N = Convert.ToInt32(Console.ReadLine());
            for (int i = 0; i < N;i++)
                arr[i]= Convert.ToInt32(Console.ReadLine());
            int max = arr[0];
            for (int i = 1; i < N; i++)
            {
                if (arr[i] > max)
                {
                    max = arr[i];
                    m = i;
                }
                arr[m] = arr[0];
                arr[0] = max;
            }
            for (int i = 0; i < N; i++)
                Console.WriteLine(arr[i]);
            Console.ReadKey();
        }
    }
}
Миниатюры
Как оптимизировать прогу по времени и памяти?  
0
1 / 1 / 0
Регистрация: 19.07.2018
Сообщений: 108
16.10.2018, 21:15  [ТС] 4
Была и такая вариация,все равно не верно
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
 
namespace Pomenitmest
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            int m= 0;
            int [] arr = new int[1000];
            int max = -1000;
            int N = Convert.ToInt32(Console.ReadLine());
            for (int i = 0; i < N; i++)
            {
                arr[i] = Convert.ToInt32(Console.ReadLine());
                if (arr[i] > max)
                {
                    max = arr[i];
                    m = i;
                }
 
            }
            arr[m] = arr[0];
            arr[0] = max;
            for (int i = 0; i < N; i++)
                Console.WriteLine(arr[i]);
            Console.ReadKey();
        }
    }
}
0
Эксперт .NET
17751 / 12906 / 3374
Регистрация: 17.09.2011
Сообщений: 21,181
16.10.2018, 21:43 5
Цитата Сообщение от Maksat333 Посмотреть сообщение
C#
1
2
arr[m] = arr[0];
arr[0] = max;
Вот здесь у вас что-то странное происходит.
Вы на каждой итерации меняете местами первый и максимальный элементы массива.
Если элементов 1000, то вы их меняете местами 1000 раз.


Пардон, это я слепой.

Попробуйте изначально максимальным элементом сделать первый элемент массива, а не -1000.
То есть как было в первом варианте, только без перестановок на каждой итерации.
Плюс у вас уже есть индекс максимального элемента (m) — дополнительная переменная max не нужна.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
16.10.2018, 21:52 6
Цитата Сообщение от Maksat333 Посмотреть сообщение
Во второй строке задаются N чисел – элементы массива (целые числа, не превосходящие по модулю 1000).
Цитата Сообщение от Maksat333 Посмотреть сообщение
второй строке
Цитата Сообщение от Maksat333 Посмотреть сообщение
for (int i = 0; i < N; i++)
* * * * * * {
* * * * * * * * arr[i] = Convert.ToInt32(Console.ReadLine());
как-то так
0
1 / 1 / 0
Регистрация: 19.07.2018
Сообщений: 108
16.10.2018, 21:55  [ТС] 7
Цитата Сообщение от КОП Посмотреть сообщение
как-то так
Не пойму,что не так
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
16.10.2018, 21:56 8
Цитата Сообщение от Maksat333 Посмотреть сообщение
Не пойму,что не так
вы читаете N строк вместо одной

вбейте себе в консоль так:
C#
1
2
4
1 2 3 4
1
1 / 1 / 0
Регистрация: 19.07.2018
Сообщений: 108
16.10.2018, 22:39  [ТС] 9
Цитата Сообщение от КОП Посмотреть сообщение
вы читаете N строк вместо одной
А как сделать так,что бы это одной строкой записывалось

Добавлено через 39 минут
не понимаю
C#
1
arr[i] = Convert.ToInt32(Console.Read());
не работает
0
Модератор
Эксперт .NET
15661 / 10843 / 2812
Регистрация: 21.04.2018
Сообщений: 31,844
Записей в блоге: 2
16.10.2018, 22:56 10
Вот на выходе получите свой массив
C#
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
                int? max = null;
                int  tmp, sp = -1;
                int N = Convert.ToInt16(Console.ReadLine());
                List <int> arr = new List<int>();
                if (N < 1000)
                {
 
                    for (int i = 0; i < N; i++)
                    {
                        tmp = Int16.Parse(Console.ReadLine());
                        if (max == null || tmp > max) { max = tmp; sp = i; }
                        arr.Add(tmp);
                    }
 
                    tmp = arr[0];
                    arr[0] = arr[sp];
                    arr[sp] = tmp;
                }
                else
                    Console.WriteLine("Error");
                Console.ReadKey();
0
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
16.10.2018, 23:04 11
Элд Хасп, та же самая ошибка: вы читаете N строк, а там одна строка с N значений.
0
Модератор
Эксперт .NET
15661 / 10843 / 2812
Регистрация: 21.04.2018
Сообщений: 31,844
Записей в блоге: 2
16.10.2018, 23:23 12
Цитата Сообщение от Lexeq Посмотреть сообщение
Элд Хасп, та же самая ошибка: вы читаете N строк, а там одна строка с N значений.
Условия задачи под кодом не прочитал....
Косяк...

Добавлено через 13 минут
C#
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
                int? max = null;
                int sp=0;
                int N = Convert.ToInt16(Console.ReadLine());
                int[] arr;
                if (N < 1000)
                {
                    arr = Console.ReadLine().Split().Select(str => int.TryParse(str, out int numb) ? (int?)numb : null).Where(numb => numb != null).Select(numb => (int)numb).ToArray();
                    for (int i = 0; i < arr.Length; i++)
                    {
                        if (max == null || arr[i] > max) { max = arr[i]; sp = i; }
                    }
 
                    arr[sp] =  arr[0];
                    arr[0] =(int) max;
                }
                else
                    Console.WriteLine("Error");
                Console.ReadKey();
            }
0
1 / 1 / 0
Регистрация: 19.07.2018
Сообщений: 108
18.10.2018, 23:17  [ТС] 13
C:\Users\Максим\Documents\Projects\program\program\Program.cs(47,47): Error CS1525: Недопустимый термин "int" в выражении (CS1525) (program)

Добавлено через 22 секунды
15 строка
0
Модератор
Эксперт .NET
15661 / 10843 / 2812
Регистрация: 21.04.2018
Сообщений: 31,844
Записей в блоге: 2
19.10.2018, 00:06 14
Цитата Сообщение от Maksat333 Посмотреть сообщение
C:\Users\Максим\Documents\Projects\program\program\Program.cs(47,47): Error CS1525: Недопустимый термин "int" в выражении (CS1525) (program)
Добавлено через 22 секунды
15 строка
Вы за какой вариант говорите? Мой работает без каких либо ошибок.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
19.10.2018, 00:14 15
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы за какой вариант говорите?
на тестовых максимум C# 6.0
0
1 / 1 / 0
Регистрация: 19.07.2018
Сообщений: 108
19.10.2018, 21:42  [ТС] 16
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы за какой вариант говорите? Мой работает без каких либо ошибок.
Да именно ваш,второй,он не может присвоить numb тип инт
0
Модератор
Эксперт .NET
15661 / 10843 / 2812
Регистрация: 21.04.2018
Сообщений: 31,844
Записей в блоге: 2
19.10.2018, 22:17 17
Цитата Сообщение от Maksat333 Посмотреть сообщение
Да именно ваш,второй,он не может присвоить numb тип инт
Наверное, прав КОП - причина в разнице версий. У Вас какая версия С#?

Добавлено через 7 минут
По моему только в 7 появилось внутреннее объявление. Попробуйте вывести из строки объявление переменной
C#
14
15
                { int numb=0;
                    arr = Console.ReadLine().Split().Select(str => int.TryParse(str, out numb) ? (int?)numb : null).Where(numb => numb != null).Select(numb => (int)numb).ToArray();
0
19.10.2018, 22:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2018, 22:17
Помогаю со студенческими работами здесь

Как оптимизировать по памяти решение по сортировке дуг графа?
короче все началось с того что я решал Ориентированный взвешенный граф задан перечнем дуг...

Код потребляет очень много памяти. Подскажите как оптимизировать?
Есть код на C++ (компилируется под GCC) - подсчёт коэффициентов осцилляторной системы методом...

Как оптимизировать программу, чтобы она использовала меньше оператиной памяти и меньше загружала процессор
Есть ли какие-либо средства для оптимизации программы в Visual Studio 2010? Как оптимизировать...

Оптимизировать код по времени
Задача: Дан текст. Выведите слово, которое в этом тексте встречается чаще всего. Если таких слов...

Оптимизировать потребление памяти
В вузе лаба: реализовать вращающийся текст на форме, создав пользовательский элемент управления,...

Оптимизировать программу по времени, работа с массивом
Добрый день! Задача: дан массив N вводится элементов 2*n затем вводятся значения элементов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru