Итератор для Ферзя - Клетка, на которой стоит ферзь под боем не находится - C#

Узнай цену своей работы

Формулировка задачи:

Объявить в форме статического метода итератор Queen, который получает местоположение ферзя на шахматной доске и в произвольном порядке перечисляет все клетки, находящиеся под боем этого ферзя. Клетка, на которой стоит ферзь под боем не находится. Клетка доски представлена двусимвольной строкой, например, "a1", "e2", "b8". Есть набросок, но он неправильный, вообще ничего не возвращает почему-то.
        static IEnumerable<string> Queen(string q)
        {
            int row = (int)q[0] - 97;
            int col = Convert.ToInt32(q[1]);
 
            for (int r = row; r < 8; ++r)
            {
                if (r < 0 || r > 8) 
                    continue;
                for(int c = col; c < 8; ++c)
                {
                    if (c < 0 || c > 8 || c == col && r == row) 
                        continue;
                    yield return string.Format("{0}{1}", (char)(row + 97), col);
                }
            }
        }
Вариант номер 2, уже что-то выводит, но всё равно не так, как надо...
        static IEnumerable<string> Queen(string q)
        {
            int row = (int)q[0] - 97;
            int col = Convert.ToInt32(q[1]);
 
            for (int r = 0; r < 8; ++r)
            {
                if (r < 0 || r > 8) 
                    continue;
                for(int c = 0; c < 8; ++c)
                {
                    if (c < 0 || c > 8 || c == col && r == row) 
                        continue;
                    yield return string.Format("{0}{1}", (char)(r + 97), c);
                }
            }
        }
Вариант №3: уже выводит просто все клетки доски
         static IEnumerable<string> Queen(string q)
        {
            int row = (int)q[0] - 97;
            int col = Convert.ToInt32(q[1]);
 
            for (int r = 1; r < 9; ++r)
            {
                if (r < 1 || r > 9) 
                    continue;
                for(int c = 1; c < 9; ++c)
                {
                    if (c < 1 || c > 9 || c == col && r == row) 
                        continue;
                    yield return string.Format("{0}{1}", (char)(r + 96), c);
                }
            }
        }

Решение задачи: «Итератор для Ферзя - Клетка, на которой стоит ферзь под боем не находится»

textual
Листинг программы
    class Program
    {
        const int DIM = 8;
        static char[,] board = new char[DIM, DIM];
 
        static void Main(string[] args)
        {
            for (int x = 0; x < DIM; x++) for (int y = 0; y < DIM; y++) board[y, x] = '.';
            foreach (string s in Queen("E4"))
            {
                board[s[0] - 'A', s[1] - '1'] = '*';
                Console.WriteLine(s);
            }
            for (int x = 0; x < DIM; x++) { for (int y = 0; y < DIM; y++) Console.Write(board[y, x]); Console.WriteLine(); }
            Console.ReadKey();
        }
 
        private static IEnumerable<string> Queen(string q)
        {
            int[] dx = new int[8] { 0, 0, 1, -1, 1, 1, -1, -1 };
            int[] dy = new int[8] { 1, -1, 0, 0, 1, -1, -1, 1 };
            int x = q[0] - 'A';
            int y = q[1] - '1';
            for (int i = 0; i < 8; i++)
                for (int m = 1; m < 8; m++)
                {
                    var nx = x + m * dx[i];
                    var ny = y + m * dy[i];
                    if ((nx < 0) || (nx >= DIM) || (ny < 0) || (ny >= DIM)) continue;
                    yield return String.Format("{0}{1}", (char)(nx + 'A'), (char)(ny + '1'));
                }
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы