ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1131. Копирование

Тест №5 С#
Послано Toriki 23 окт 2017 17:42
Сразу объясняю можно намного проще, но я решил попрактиковаться в ООП.

Сам код. Не могу понять где ошибка (Завален 5-й тест):

using System;

namespace NullCopy
{
    class Program
    {
        static void Main(string[] args)
        {
            string inputData = Console.ReadLine();
            int countOfComputers = int.Parse(inputData.Split(' ')[0]);
            int countOfCables = int.Parse(inputData.Split(' ')[1]);
            Computer[] computerRoom = SetComputerRoom(countOfComputers);
            int time = 0;


            while (!IsAllInstalled(computerRoom))
            {
                int index = IndexOfFirst(computerRoom);
                int conValue = ConnectionsValue(computerRoom, countOfCables);

                for (int i = index;  i < index + conValue; i++)
                {
                    if (i < computerRoom.Length)
                    {
                        computerRoom[i].Installing();
                    }
                }
                time++;
            }

            Console.WriteLine(time);
            Console.ReadKey();
        }

        // Возвращает порядковый номер первого найденного элемента массива, с неустановленной игрой.
        static int IndexOfFirst (Computer[] computerRoom)
        {
            int index = 0;
            bool isFind = true;

            while ((isFind) && (index < computerRoom.Length))
            {
                if (!computerRoom[index].IsInstalled()) { isFind = false; }
                else index++;
            }

            return index;
        }

        // Метод, возвращающий true если игра установленна на все компьютеры
        // или false если есть компьютеры без игры.
        static bool IsAllInstalled (Computer[] computerRoom)
        {
            bool isAllInstalled = true;

            for (int i = 0; i < computerRoom.Length; i++)
            {
                if (!computerRoom[i].IsInstalled()) { isAllInstalled = false; }
            }

            return isAllInstalled;
        }


        // Метод, возвращающий кол-во компьютеров, способных передавать игру на другие компьютеры,
        // с учётом количества доступных кабелей.
        static int ConnectionsValue(Computer[] computerRoom, int maxValue)
        {
            int value = 0;

            for (int i = 0; i < computerRoom.Length; i++)
            {
                // Если на компьютере установленна игра, то он, потенциально,
                // способен передать её другому компьюетру.
                if (computerRoom[i].IsInstalled()) { value++; }
            }

            // Если количество потенциальных компьютеров больше количества доступных кабелей,
            // то мы возвращаем каличество кабелей.
            if (value > maxValue) { return maxValue; }
            // Иначе возвращаем количество компьютеров, готовых к передаче игры на другие.
            else return value;

        }

        // Создаём компьютерный класс(помещение с компьютерами).
        static Computer[] SetComputerRoom(int countOf)
        {
            Computer[] computerRoom = new Computer[countOf];

            // Пропускаем первый элемент (его мы объявим позднее)
            for (int i = 1; i < computerRoom.Length; i++)
            {
                computerRoom[i] = new Computer();
            }

            // Создаём первый элемент с заранее установленной игрой.
            computerRoom[0] = new Computer(true);

            return computerRoom;
        }
    }

    public class Computer
    {
        // свойство, определяющее установленна ли игра на компьютере.
        private bool isInstalled;

        // Конструктор с неустановленной игрой по-умолчанию.
        public Computer (bool isInstalled = false)
        {
            this.isInstalled = isInstalled;
        }

        // Устанавливаем игру.
        public void Installing ()
        {
            isInstalled = true;
        }

        // Установленна ли на компьютере игра?
        public bool IsInstalled()
        {
            return isInstalled;
        }
    }
}

Необязательно указывать на саму ошибку. Если кто объяснит в чём заключается 5-й тест, то уже будет большая помощь.

Edited by author 23.10.2017 17:48
Re: Тест №5 С#
Послано Toriki 23 окт 2017 19:52
Нашёл ошибку: при слишком большом кол-ве компов, память переполняется или программа работает медленно. в остальном логика программы работает. Как пример ООП пойдёт.