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

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

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

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

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

Оптимизация кода
Добрый. Помогите пожалуйста оптимизировать следующий участок кода: public static int...

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

5
1015 / 716 / 208
Регистрация: 15.08.2010
Сообщений: 2,019
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
Эксперт .NET
13493 / 10455 / 2751
Регистрация: 17.09.2011
Сообщений: 17,771
02.11.2018, 13:56 3
Лучший ответ Сообщение было отмечено ITSSS как решение

Решение

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

Добавлено через 2 минуты
Цитата Сообщение от ITSSS Посмотреть сообщение
Входные данные:
В первой строке задано....
По моему, из этого выражения следует, что ввод должен быть из потока (файла), а не из консоли.
1
Эксперт .NET
13493 / 10455 / 2751
Регистрация: 17.09.2011
Сообщений: 17,771
02.11.2018, 14:08 5
Цитата Сообщение от Элд Хасп Посмотреть сообщение
из этого выражения следует, что ввод должен быть из потока (файла), а не из консоли.
Не, тут все нормально — такие задачки всегда с консолью работают.
Если проверяющему надо загрузить данные из файла, то это делается оператором перенаправления стандартного ввода.
1
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 27
02.11.2018, 14:53  [ТС] 6
Спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2018, 14:53

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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