Перепись

      Комментарии к записи Перепись отключены

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 2 нед., 1 день назад.

  • Автор
    Сообщения
  • #3377

    Условие задачи взято с сайта acmp.ru:

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

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

    Выходные данные:
    Выходной файл OUTPUT.TXT должен содержать номер самого старшего мужчины в списке. Если таких жильцов несколько, то следует вывести наименьший номер. Если жильцов мужского пола нет, то выведите -1.

    Пример:

    input.txt:

    4
    25 1
    70 1
    100 0
    3 1

    output.txt:

    2

    Разбор решения задачи

    Блок-схема алгоритма:

    Исходный код на языке C#:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1 
    {
        class Program {
            static void Main(string[] args) {
                int max = 0;
                int k = -1;
                List<string> persons = new List<string>();
                StreamReader sr = new StreamReader("input.txt");
                int n = int.Parse(sr.ReadLine());
               
                   
                List<String> mas = sr.ReadToEnd().Split('\n').ToList();
    
                for (int i = 0; i < n; i++) {
                    if (i == 0) {
                        continue;
                    }
                    persons = mas[i].Split(' ').ToList();
                    if (Convert.ToInt32(persons[0]) > max && persons[1].Contains("1") ) {
                        max = Convert.ToInt32(persons[0]);
                        k = i+1;
                        persons.Clear();
    
                    }
                    persons.Clear();
    
                }
                sr.Close();
                
                StreamWriter sw = new StreamWriter("output.txt");
                sw.WriteLine(k.ToString());
                sw.Close();
            }
        }
    }
    

    Используемые классы и функции:

    1. List, класс, представляет строго типизированный список объектов, доступных по индексу. Поддерживает методы для поиска по списку, выполнения сортировки и других операций со списками.
    2. StreamReader, класс, реализует объект TextReader, который считывает символы из потока байтов в определенной кодировке.
    3. Int32.Parse, метод, преобразует строковое представление числа в эквивалентное ему 32-битовое целое число со знаком.
    4. String.Split, метод, возвращает строковый массив, содержащий подстроки данного экземпляра, разделенные элементами заданного массива знаков Юникода.
    5. Convert, класс, преобразует значение одного базового типа данных к другому базовому типу данных.
    6. StreamWriter, класс, реализует TextWriter для записи символов в поток в определенной кодировке.
    7. Метод StreamReader.ReadToEnd, считывает все символы, начиная с текущей позиции до конца потока.
    8. String.Contains, метод, возвращает значение, указывающее, содержит ли указанная строка значение подстроки переданной в качестве параметра.

Для ответа в этой теме необходимо авторизоваться.