0 / 0 / 0
Регистрация: 13.11.2018
Сообщений: 29
1

Сможет ли конь с одного хода достичь позицию, которую указал пользователь

04.04.2020, 08:06. Показов 2962. Ответов 15

Author24 — интернет-сервис помощи студентам
Задается начальная координата шахматной фигуры «Конь», вывести сможет ли с одного
хода достичь позицию, которую указал пользователь. Помогите пожалуйста)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2020, 08:06
Ответы с готовыми решениями:

Список клеток, которые конь может достичь за один ход
Здравствуйте форумчане. прошу у вас помощи. Дело в том что меня послали на олимпиаду с...

Список клеток, которые конь может достичь за первый и второй ход
Здравствуйте. Прошу у вас помощи. Меня послали на олимпиаду по программированию, задачки там делать...

шахматная доска, конь и 2 хода
Есть задача: Поле шахматной доски определяется парой натуральных чисел (номер вертикали – номер...

Вычислить позиции, на которые конь может попасть за 2 хода
Вся задача сводится к тому, чтобы вычислить позиции на которые конь может попасть за 2 хода(и...

15
97 / 33 / 12
Регистрация: 24.11.2018
Сообщений: 191
04.04.2020, 09:45 2
Лучший ответ Сообщение было отмечено Enifan как решение

Решение

Формула простая: х=X0-X1, у=Y0-Y1, x!=0, y!=0 и |x|+|y| == 3.
Вроде все учел.
1
5 / 3 / 2
Регистрация: 28.12.2019
Сообщений: 18
Записей в блоге: 1
04.04.2020, 10:02 3
Лучший ответ Сообщение было отмечено Azankou как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
 
namespace ACMP
{
    class Program
    {
        static void Main(string[] args)
        {
            string turn = Console.ReadLine();
 
            Console.WriteLine(GetAnswer(turn));
        }
 
        public static string GetAnswer(string turn)
        {
            if (turn.Length == 5 && turn[0] >= 'A' && turn[0] <= 'H' && turn[3] >= 'A' && turn[3] <= 'H' &&
                turn[1] >= '1' && turn[1] <= '8' && turn[2] == '-' && turn[4] >= '1' && turn[4] <= '8')
            {
                char firstLetter = turn[0];
                int firstCord = int.Parse(turn[1].ToString());
 
                int[] nmb = { firstCord + 2, firstCord - 2, firstCord + 1, firstCord - 1 };
                char[] symb = { Convert.ToChar(firstLetter + 1), Convert.ToChar(firstLetter - 1), Convert.ToChar(firstLetter + 2), Convert.ToChar(firstLetter - 2) };
 
                for (int i = 0; i < 2; i++)
                {
                    for (int j = 0; j < 2; j++)
                    {
                        if (PossibilityCheck(firstLetter, firstCord, i, j, turn, nmb, symb))
                        {
                            return "YES";
                        }
                    }
                }
 
                for (int i = 1; i < 3; i++)
                {
                    for (int j = 1; j < 3; j++)
                    {
                        if (PossibilityCheck(firstLetter, firstCord, i, j, turn, nmb, symb))
                        {
                            return "YES";
                        }
                    }
                }
 
                for (int i = 2; i < 4; i++)
                {
                    for (int j = 2; j < 4; j++)
                    {
                        if (PossibilityCheck(firstLetter, firstCord, i, j, turn, nmb, symb))
                        {
                            return "YES";
                        }
                    }
                }             
 
                return "NO";
            }
 
            return "ERROR";
        }
 
        public static bool PossibilityCheck (char firstLetter, int firstCord, int pos1, int pos2, string turn, int[] nmb, char[] symb)
        {
            if (nmb[pos1] >= 1 && nmb[pos1] <= 8 && symb[pos2] >= 'A' && symb[pos2] <= 'H' && firstLetter + "" + firstCord + "-" + symb[pos2] + "" + nmb[pos1] == turn)
            {
                return true;
            }
 
            return false;
        }
    }
}
0
97 / 33 / 12
Регистрация: 24.11.2018
Сообщений: 191
04.04.2020, 10:36 4
Лучший ответ Сообщение было отмечено Azankou как решение

Решение

despair_101, зачем так сложно?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
 
namespace cons03
{
    class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Введите начальную X");
            int x0 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите начальную Y");
            int y0 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите конечную X");
            int x1 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите конечную Y");
            int y1 = Convert.ToInt32(Console.ReadLine());
            
            int x = x0 - x1;
            int y = y0 - y1;
            
            if(x != 0 && y != 0 && Math.Abs(x) + Math.Abs(y) == 3)
                Console.Write("Можем");
            else
                Console.Write("Не можем");
            
            Console.ReadKey();
        }
    }
}
0
97 / 33 / 12
Регистрация: 24.11.2018
Сообщений: 191
04.04.2020, 10:36 5
Задублировало(.
0
1842 / 1184 / 501
Регистрация: 14.10.2018
Сообщений: 3,180
04.04.2020, 10:41 6
Положительный, способ хорош, границы поля я так понимаю надо отслеживать через x1 и y1 ?
0
97 / 33 / 12
Регистрация: 24.11.2018
Сообщений: 191
04.04.2020, 10:53 7
Цитата Сообщение от Enifan Посмотреть сообщение
Положительный, способ хорош, границы поля я так понимаю надо отслеживать через x1 и y1 ?
Смысл? Не нужно ничего отслеживать. В задании всё уже в пределах доски.
Или я не понял вопрос(
0
5 / 3 / 2
Регистрация: 28.12.2019
Сообщений: 18
Записей в блоге: 1
04.04.2020, 11:12 8
Мой код относится к этой задаче. Думаю, автор хотел получить ответ на неё.

Текс задачи:
Совсем недавно Вася занялся программированием и решил реализовать собственную программу для игры в шахматы. Но у него возникла проблема определения правильности хода конем, который делает пользователь. Т.е. если пользователь вводит значение «C7-D5», то программа должна определить это как правильный ход, если же введено «E2-E4», то ход неверный. Так же нужно проверить корректность записи ввода: если например, введено «D9-N5», то программа должна определить данную запись как ошибочную. Помогите ему осуществить эту проверку!

Входные данные
В единственной строке входного файла INPUT.TXT записан текст хода (непустая строка), который указал пользователь. Пользователь не может ввести строку, длиннее 5 символов.

Выходные данные
В выходной файл OUTPUT.TXT нужно вывести «YES», если указанный ход конем верный, если же запись корректна (в смысле правильности записи координат), но ход невозможен, то нужно вывести «NO». Если же координаты не определены или заданы некорректно, то вывести сообщение «ERROR».
0
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 65
04.04.2020, 11:15 9
Подскажите, а возможно эту задачу решить только с помощью условных операторов без Math.Abs?
0
5 / 3 / 2
Регистрация: 28.12.2019
Сообщений: 18
Записей в блоге: 1
04.04.2020, 11:19 10
RinaGrig, да, я отправил такое решение выше.

Или можно добавить две проверки в код Положительного.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
 
namespace cons03
{
    class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Введите начальную X");
            int x0 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите начальную Y");
            int y0 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите конечную X");
            int x1 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите конечную Y");
            int y1 = Convert.ToInt32(Console.ReadLine());
 
            int x = x0 - x1;
            int y = y0 - y1;
 
            if (x < 0)
                x = -x;
 
            if (y < 0)
                y = -y;
 
            if (x != 0 && y != 0 && x + y == 3)
                Console.Write("Можем");
            else
                Console.Write("Не можем");
 
            Console.ReadKey();
        }
    }
}
1
1842 / 1184 / 501
Регистрация: 14.10.2018
Сообщений: 3,180
04.04.2020, 11:22 11
Цитата Сообщение от Положительный Посмотреть сообщение
Смысл?
ну может мне в дальнейшем нужно будет написать данный алгоритм, и данный вопрос был не под текущую задачу, а в целом. Считает то верно, а пределы доски не отслеживает
Миниатюры
Сможет ли конь с одного хода достичь позицию, которую указал пользователь  
0
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 65
04.04.2020, 11:25 12
despair_101, да, только там вместе с условными операторами (if-else) есть еще и цикл for, а можно как-то только с if и else?
0
5 / 3 / 2
Регистрация: 28.12.2019
Сообщений: 18
Записей в блоге: 1
04.04.2020, 11:28 13
RinaGrig, посмотрите мой прошлый комментарий
0
97 / 33 / 12
Регистрация: 24.11.2018
Сообщений: 191
04.04.2020, 11:43 14
Цитата Сообщение от Enifan Посмотреть сообщение
ну может мне в дальнейшем нужно будет написать данный алгоритм, и данный вопрос был не под текущую задачу, а в целом.
Ну, с вашей репутацией и опытом вам это не составит особого труда(добавить проверки на выход за пределы доски).
0
1842 / 1184 / 501
Регистрация: 14.10.2018
Сообщений: 3,180
04.04.2020, 11:52 15
Цитата Сообщение от Положительный Посмотреть сообщение
добавить проверки на выход за пределы доски
я лишь уточнил
0
97 / 33 / 12
Регистрация: 24.11.2018
Сообщений: 191
04.04.2020, 12:00 16
Цитата Сообщение от Enifan Посмотреть сообщение
я лишь уточнил
А смысл? Пока такая задача не стоит "ребром". Вы можете самостоятельно и я могу. Смысл тратить попусту ресурсы?
0
04.04.2020, 12:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2020, 12:00
Помогаю со студенческими работами здесь

Может ли конь дойти до заданной клетки не более чем за два хода?
На шахматной доске 8*8 в некоторой клетке гордо стоит конь. Он не простой, а золотой. Этот конь...

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

Сможет ли конь побить пешку? Использовать только bool
Дана задача. Шахматная доска, обычного типа, и 2 фигуры - конь и пешка. Нужно сделать проверку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru