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

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

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

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
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.10.2018, 14:27
Ответы с готовыми решениями:

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

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

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

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

9
управление сложностью
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
31.10.2018, 14:47 2
Цитата Сообщение от ITSSS Посмотреть сообщение
Подробнее о задаче можно узнать в прикрепленной пикче ниже:
потрудитесь перепечатать текст с этой кикчи
0
Эксперт .NET
17791 / 12942 / 3381
Регистрация: 17.09.2011
Сообщений: 21,219
31.10.2018, 14:47 3
Лучший ответ Сообщение было отмечено 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
1968 / 1427 / 337
Регистрация: 15.06.2012
Сообщений: 5,357
Записей в блоге: 3
31.10.2018, 14:59 4
либо я не вкурил задачу, либо всеже все нямного проще...
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  [ТС] 5
либо я не вкурил задачу, либо всеже все нямного проще...
Не, она сложнее, при вводе 36, получается 13 и 216
0
Эксперт .NET
1968 / 1427 / 337
Регистрация: 15.06.2012
Сообщений: 5,357
Записей в блоге: 3
31.10.2018, 16:25 6
Лучший ответ Сообщение было отмечено 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  [ТС] 7
Спасибо, у вас хороший вариант, но проблема заключается в том, что числа большие, и при решении задачи существует лимит обработки равной 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
1968 / 1427 / 337
Регистрация: 15.06.2012
Сообщений: 5,357
Записей в блоге: 3
31.10.2018, 17:21 8
Лучший ответ Сообщение было отмечено ITSSS как решение

Решение

Цитата Сообщение от ITSSS Посмотреть сообщение
И если такой код использовать, то он занимает полторы секунды(что больше положенного).
Такое впечатление что вы мой код еще зачемто как-то "расширяли". Замерял свой (вверху) и ваш пример
Код
max = 12884901882; min = 357913947
00:00:00.0008771
357913947 12884901882
00:00:00.0020140
Press any key to continue . . .
учитывая что ваш код базируется на проходе циклом, он априори будет медленее для больших чисел
1
Эксперт .NET
17791 / 12942 / 3381
Регистрация: 17.09.2011
Сообщений: 21,219
01.11.2018, 09:21 9
Цитата Сообщение от ITSSS Посмотреть сообщение
при вводе 36, получается 13 и 216
13-то откуда?
Это в примерах дано или вы сами как-то рассчитали?
Чтобы первый игрок получил 36, ему нужно бросить как минимум 6 кубиков, да так, чтобы они упали на 6.
Это значит, что минимум второго игрока будет 6, но никак не 13.
1
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 27
02.11.2018, 11:41  [ТС] 10
Ошибка в коде была
0
02.11.2018, 11:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2018, 11:41
Помогаю со студенческими работами здесь

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

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

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

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


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

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