ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1131. Copying

Тест №5 С#
Posted by Toriki 23 Oct 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 С#
Posted by Toriki 23 Oct 2017 19:52
Нашёл ошибку: при слишком большом кол-ве компов, память переполняется или программа работает медленно. в остальном логика программы работает. Как пример ООП пойдёт.