Опубликован: 09.12.2017 | Доступ: свободный | Студентов: 737 / 31 | Длительность: 02:06:00
Специальности: Программист
Лекция 5:

Игра "Быки и коровы"

< Лекция 1 || Лекция 5: 123456
Как считать быков и коров

Прежде, чем считать быков и коров, сравнивая два числа, эти числа разбираются на цифры и числа представляются массивами, каждый элемент которых представляет отдельную цифру. Такое представление позволяет достаточно просто и понятно решать поставленную задачу, сравнивая отдельные цифры. Важно отметить, что, когда некоторые цифры получают статус "быка" или "коровы", то они уже не участвуют в дальнейшем рассмотрении. В программе это достигается за счет того, что цифры получают значение -1, невозможное для настоящей цифры.

Вот соответствующий код:

/// <summary>
        /// Подсчет числа быков и коров, используя
        /// number - задуманное число и
        /// answer - текущий ответ
        /// </summary>
        /// <returns>строку с числом быков и коров в ответе </returns>
        string OxAndCow()
        {
            string res = "";
            ox_n = 0;
            cow_n = 0;
            int[] ar_number = new int[digits];
            int[] ar_answer = new int[digits];

            //Расщепление на цифры
            ar_number = Split(number, digits);
            ar_answer = Split(answer, digits);

            //Подсчет быков
            for(int i = 0; i < digits; i++)
            {
                if ( ar_answer[i] == ar_number[i])
                {
                    ox_n++;
                    ar_number[i] = -1;  //бык найден
                    ar_answer[i] = -1;
                } 
            }

            //Подсчет коров
            for (int i = 0; i < digits; i++)
            {
                int d = ar_answer[i];
                if(d >= 0) //не бык, но может быть корова
                for(int j = 0; j < digits; j++)
                    if (d == ar_number[j])
                    {
                        cow_n++;
                        ar_number[j] = -1;  //корова найдена
                        ar_answer[i] = -1;
                        break;
                    }
            }
            res = "  Быков - " + ox_n + "  Коров - " + cow_n;
            return res;
         }
Как разобрать число на цифры

Для разбора целого десятичного числа на цифры используются две замечательные операции, применимые к целым числам. Остаток от деления числа на 10 дает последнюю цифру числа. Деление нацело числа на 10 отрезает от числа последнюю цифру. Циклическое применение этих двух операций решает поставленную задачу. Вот код функции Split:

/// <summary>
        /// Разбор числа на цифры
        /// создание массива цифр
        /// </summary>
        /// <param name="number">число</param>
        /// <param name = "n">число цифр числа</param>
        /// <returns>массив цифр</returns>
        int[] Split(int number, int n)
        {
            int[] res = new int[n];
            for (int i = 0; i < n; i++)
            {
                res[n - i - 1] = number % 10;
                number = number / 10;
            }
            return res;
        }
< Лекция 1 || Лекция 5: 123456