Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 27

Оптимизация скорости кода

31.10.2018, 14:27. Показов 3361. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо(дать совет по оптимизации) оптимизировать код, чтоб меньше времени занимало на обработку данных.
Подробнее о задаче можно узнать в прикрепленной пикче ниже:
Код:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using System;
 
public class Program
{
    public static void Main(string[] args)
    {
        long i = long.Parse(Console.ReadLine());
        long min = 0;
        long max = 0;
        long count = 1;
        long first = 0;
        long second = 0;
        long result = i;
        if (i <= 6)
        {
            switch (i)
            {
                case 6:
                    min = 1;
                    max = 6 * 6;
                    break;
                case 5:
                    min = 2;
                    max = 5 * 6;
                    break;
                case 4:
                    min = 3;
                    max = 4 * 6;
                    break;
                case 3:
                    min = 4;
                    max = 3 * 6;
                    break;
                case 2:
                    min = 5;
                    max = 2 * 6;
                    break;
                case 1:
                    min = 6;
                    max = 6;
                    break;
            }
            if (i <= 6)
            {
                Console.WriteLine(min + " " + max);
            }
        }
        else if (i % 1 == 0)
        {
            count = 0;
            while (i >= 6)
            {
                i -= 6;
                count++;
            }
            switch (i)
            {
                case 5:
                    first = count + 2;
                    second = result * 6;
                    break;
                case 4:
                    first = count + 3;
                    second = result * 6;
                    break;
                case 3:
                    first = count + 4;
                    second = result * 6;
                    break;
                case 2:
                    first = count + 5;
                    second = result * 6;
                    break;
                case 1:
                    first = count + 6;
                    second = result * 6;
                    break;
                case 0:
                    first = count;
                    second = result * 6;
                    break;
            }
            Console.WriteLine(first + " " + second);
        }
    }
}
Вложения, ожидающие проверки
Тип файла: jpg joxi_screenshot_1540985282865.jpg
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.10.2018, 14:27
Ответы с готовыми решениями:

Оптимизация скорости выполнения
Нахожусь в процессе написания проги для определения СЕО-параметров сайта. Программа разбита на функции, каждая из которых определяет свой...

Оптимальность кода по скорости выполнения
Есть код: using System; using Examples.Collections; namespace Examples.Collections.Generic { //Односвязный линейный...

Оптимизация кода
Вопрос такой есть ли способ оптимизировать сей код, прибегая к помощи массивов или иными путями? Если да то какие. (Уровень моего C#:...

9
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
31.10.2018, 14:47
Цитата Сообщение от ITSSS Посмотреть сообщение
Подробнее о задаче можно узнать в прикрепленной пикче ниже:
потрудитесь перепечатать текст с этой кикчи
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
31.10.2018, 14:47
Лучший ответ Сообщение было отмечено ITSSS как решение

Решение

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

Минимальное количество кубиков для результата N первого игрока должно быть https://www.cyberforum.ru/cgi-bin/latex.cgi?\lceil{\frac{N}{6}}\rceil, а максимальное количество кубиков — N (все выпали на единицу).

Тогда получается, что минимальный результат, который мог получить второй игрок — https://www.cyberforum.ru/cgi-bin/latex.cgi?\lceil{\frac{N}{6}}\rceil (минимально возможное количество кубиков, которые все выпали на единицу), а максимальный результат — N * 6 (максимально возможное количество кубиков, которые первому игроку все выпали на 1, а второму игроку могли бы выпасть на 6).
1
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
31.10.2018, 14:59
либо я не вкурил задачу, либо всеже все нямного проще...
C#
1
2
3
4
var i = long.Parse(Console.ReadLine());
var max = i * 6;
var min = i / 6 + (7 - i % 6);
Console.WriteLine($"max = {max}; min = {min}")
Добавлено через 50 секунд

Не по теме:

Цитата Сообщение от kolorotur Посмотреть сообщение
Может, я как-то не так понял задание, но если количество бросаемых кубиков неизвестно, то отталкиваться нужно от этого.
о, значит таки не показалось...

1
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 27
31.10.2018, 15:20  [ТС]
либо я не вкурил задачу, либо всеже все нямного проще...
Не, она сложнее, при вводе 36, получается 13 и 216
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
31.10.2018, 16:25
Лучший ответ Сообщение было отмечено ITSSS как решение

Решение

Цитата Сообщение от ITSSS Посмотреть сообщение
получается 13
ай, не учел ноль...

C#
1
2
3
4
5
var i = long.Parse(Console.ReadLine());
var max = i * 6;
var a = i % 6;
var min = i / 6 + (a != 0 ? 7 - a : 0);
Console.WriteLine($"max = {max}; min = {min}");
1
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 27
31.10.2018, 16:47  [ТС]
Спасибо, у вас хороший вариант, но проблема заключается в том, что числа большие, и при решении задачи существует лимит обработки равной 1-ой секунде. И если такой код использовать, то он занимает полторы секунды(что больше положенного).
Я оптимизировал свой код, который успешно прошел условия по времени:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
 
public class Program
{
    public static void Main(string[] args)
    {
        long i = long.Parse(Console.ReadLine());
        long max = i * 6;
        long min = 0;
        long k = i;
        long count = 0;
        if(i <= 6)
        {
            switch (i)
            {
                case 6:
                    min = 1;
                    break;
                case 5:
                    min = 2;
                    break;
                case 4:
                    min = 3;
                    break;
                case 3:
                    min = 4;
                    break;
                case 2:
                    min = 5;
                    break;
                case 1:
                    min = 6;
                    break;
            }
        } else
        {
            for(; i > 6; i = i - 6)
            {
                if(i > 6000)
                {
                    i -= 6000;
                    count += 1000;
                }
                count++;
            }
            if (i <= 6)
            {
                switch (i)
                {
                    case 6:
                        Console.WriteLine((count + 1) + " " + max);
                        break;
                    case 5:
                        Console.WriteLine((count + 2) + " " + max);
                        break;
                    case 4:
                        Console.WriteLine((count + 3) + " " + max);
                        break;
                    case 3:
                        Console.WriteLine((count + 4) + " " + max);
                        break;
                    case 2:
                        Console.WriteLine((count + 5) + " " + max);
                        break;
                    case 1:
                        Console.WriteLine((count + 6) + " " + max);
                        break;
                    case 0:
                        Console.WriteLine((count + i) + " " + max);
                        break;
                }
            }
        }
        if(k <= 6)
        {
            Console.WriteLine(min + " " + max);
        }
    }
}
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
31.10.2018, 17:21
Лучший ответ Сообщение было отмечено ITSSS как решение

Решение

Цитата Сообщение от ITSSS Посмотреть сообщение
И если такой код использовать, то он занимает полторы секунды(что больше положенного).
Такое впечатление что вы мой код еще зачемто как-то "расширяли". Замерял свой (вверху) и ваш пример
Code
1
2
3
4
5
max = 12884901882; min = 357913947
00:00:00.0008771
357913947 12884901882
00:00:00.0020140
Press any key to continue . . .
учитывая что ваш код базируется на проходе циклом, он априори будет медленее для больших чисел
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
01.11.2018, 09:21
Цитата Сообщение от ITSSS Посмотреть сообщение
при вводе 36, получается 13 и 216
13-то откуда?
Это в примерах дано или вы сами как-то рассчитали?
Чтобы первый игрок получил 36, ему нужно бросить как минимум 6 кубиков, да так, чтобы они упали на 6.
Это значит, что минимум второго игрока будет 6, но никак не 13.
1
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 27
02.11.2018, 11:41  [ТС]
Ошибка в коде была
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.11.2018, 11:41
Помогаю со студенческими работами здесь

Оптимизация кода
Добрый день! Может ли кто-нибудь подсказать, возможна ли оптимизация (сокращения строк, без потери функционала) данной программы. ...

Оптимизация кода
Есть кусок кода: public static void NOCH (object source, ElapsedEventArgs e) { try { ...

Оптимизация кода
Описание задачи: В доме живет N жильцов. Однажды решили провести перепись всех жильцов данного дома и составили список, в котором указали...

Оптимизация кода
Можно ли это как то оптимизировать? public void Vn_Method(int a,ref Button btn1, ref Button btn2, ref Button btn3, ref Button btn4) ...

Оптимизация кода
Добрый вечер, господа! В данный момент я пишу тулзу для демонстрации алгоритмов оценки движения и временной интерполяции и столкнулся со...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru