Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
ITSSS
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 27
1

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

02.11.2018, 12:11. Просмотров 1523. Ответов 5
Метки нет (Все метки)

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

Входные данные:
В первой строке задано натуральное число N – количество жильцов (N ≤ 100). В последующих N строках располагается информация о всех жильцах: каждая строка содержит два целых числа: V и S – возраст и пол человека (1 ≤ V ≤ 100, S – 0 или 1). Мужскому полу соответствует значение S=1, а женскому – S=0.

Выходные данные:
Должны содержать номер самого старшего мужчины в списке. Если таких жильцов несколько, то следует вывести наименьший номер. Если жильцов мужского пола нет, то выведите -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
using System;
 
public class ProgramP
{
    public static void Main(string[] args)
    {
        int i = int.Parse(Console.ReadLine());
        string[] s = new string[i];
        int[] one = new int[i];
        int[] two = new int[i];
 
        int max = 0;
        int index = 0;
        int[] a = new int[i];
 
        for(int j = 0; j < i; j++)
        {
            s = Console.ReadLine().Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
            one[j] = Convert.ToInt32(s[0]);
            two[j] = Convert.ToInt32(s[1]);
        }
        point1:
        for(int j = 0; j < i; j++)
        {
            if(one[j] > max && a[j] != 1)
            {
                max = one[j];
                index = j;
            }
        }
        if(two[index] == 1)
        {
            Console.WriteLine(index + 1);
        }
        else
        {
            a[index] = 1;
            goto point1;
        }
    }
}
P.s. Тестовые данные на вход(например):

4
25 1
70 1
100 0
3 1

И должно вывести:
2
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2018, 12:11
Ответы с готовыми решениями:

Оптимизация кода
Возможно ли заменить быдло-код проверки - пуста ли строка и появления картинки возле неё? ...

Оптимизация кода
Как можно красиво зарефакторить следующий код? int a; int b; ...

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

Оптимизация кода
Есть такая статья http://habrahabr.ru/post/165729/. Но в ней перечислена лишь малая часть возможных...

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

5
КОП
682 / 500 / 159
Регистрация: 15.08.2010
Сообщений: 1,429
Завершенные тесты: 2
02.11.2018, 13:23 2
Лучший ответ Сообщение было отмечено ITSSS как решение

Решение

Цитата Сообщение от ITSSS Посмотреть сообщение
string[] s = new string[i];
* * * * int[] one = new int[i];
* * * * int[] two = new int[i];
первое правило оптимизации, если можно что-то не хранить, то это не нужно хранить

Цитата Сообщение от ITSSS Посмотреть сообщение
goto point1;
а я думал это преувеличение было, а тут и тапка мало будет
Цитата Сообщение от ITSSS Посмотреть сообщение
Мой страшный код(прошу не бить тапками):
1
kolorotur
Эксперт .NET
11479 / 9301 / 2371
Регистрация: 17.09.2011
Сообщений: 15,947
Завершенные тесты: 1
02.11.2018, 13:56 3
Лучший ответ Сообщение было отмечено ITSSS как решение

Решение

ITSSS, зачем вам груда массивов, которые вы сначала заполняете, а потом обходите?
Выбросьте массивы и делайте все в одном цикле: считывание и проверку.
Для решения задачи вам нужно всего шесть переменных: порядковый номер и возраст старшего жильца, порядковый номер, пол и возраст текущего жильца, общее количество жильцов.
1
Элд Хасп
Модератор
2306 / 1620 / 545
Регистрация: 21.04.2018
Сообщений: 5,355
Записей в блоге: 2
02.11.2018, 14:02 4
ITSSS, а под "Оптимизация кода" Вы что имеете ввиду?

Добавлено через 2 минуты
Цитата Сообщение от ITSSS Посмотреть сообщение
Входные данные:
В первой строке задано....
По моему, из этого выражения следует, что ввод должен быть из потока (файла), а не из консоли.
1
kolorotur
Эксперт .NET
11479 / 9301 / 2371
Регистрация: 17.09.2011
Сообщений: 15,947
Завершенные тесты: 1
02.11.2018, 14:08 5
Цитата Сообщение от Элд Хасп Посмотреть сообщение
из этого выражения следует, что ввод должен быть из потока (файла), а не из консоли.
Не, тут все нормально — такие задачки всегда с консолью работают.
Если проверяющему надо загрузить данные из файла, то это делается оператором перенаправления стандартного ввода.
1
ITSSS
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 27
02.11.2018, 14:53  [ТС] 6
Спасибо.
0
02.11.2018, 14:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2018, 14:53

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

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

Оптимизация кода
Доброго времени суток. Прошу прощения, если буду ошибаться в терминах, но постараюсь правильно...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru