Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 15.12.2019
Сообщений: 2
1

Составьте маршрут шахматного коня из клетки (0; 0) в заданную клетку (x; y) в космических шахматах

15.12.2019, 11:21. Показов 2509. Ответов 1
Метки нет (Все метки)

В космические шахматы играют на бесконечной доске, поэтому клетки нумеруют парой чисел (см. пример и рисунок к нему). Фигуры ходят по обычным правилам. Составьте маршрут шахматного коня из клетки (0; 0) в заданную клетку (x; y).

Напомним, что конь за один ход перемещается на одну клетку по одной оси и на две по другой, то есть, например, из клетки (0; 0) он за один ход может попасть в клетки (1; 2), (2; 1), (-1; 2), (2; -1), (1; -2), (-2; 1), (-1; -2) и (-2; -1).

В качестве ответа Вам нужно вывести любой (не обязательно кратчайший) маршрут с началом в (0; 0) и концом в (x; y), длина которого не больше 105 ходов.

Входные данные
Программа получает на вход два целых числа x и y, записанных в отдельных строках, — координаты конечной клетки маршрута коня. Клетка (x; y) не совпадает с началом координат. |x| ≤ 105, |y| ≤ 105.

Выходные данные
Программа должна вывести последовательность ходов, один ход в отдельной строке. В i-й строке должно быть выведено два числа xi и yi через пробел — координаты клетки, в которой окажется конь после i-го хода. Количество ходов не должно превышать 105. Последний ход должен вести в заданную клетку.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2019, 11:21
Ответы с готовыми решениями:

Задача: В некотором государстве ввели компьютерный паспорт гражданина.(задача)
Доброго времени суток,форумчане. Хотелось бы попросить помощи в решении одной задачи от умных...

Васильев C# Глава 8 задача 2 (Просьба объяснить формулировку(задача внутри)
Текст задачи Написать программу , в которой есть класс с полем, являющимся ссылкой на одномерный...

Васильев C# Глава 7 задача 8 (Просьба объяснить формулировку(задача внутри)
Текст задачи Напишите программу с классом, у которого есть текстовое поле. Значение текстовому...

Задача на k-тую цифру последовательности, задача на схему Горнера.
Ну, собственно опять прошу помощи... Задача 1: Определить k-тую цифру последовательности...

1
0 / 0 / 0
Регистрация: 13.02.2020
Сообщений: 1
13.02.2020, 11:57 2
Я искал грамотное решение этой задачи, но никто нигде за неё не берётся, поэтому могу предложить рандом как работающую альтернативу грамотному решению. Там надо ещё дописать для отрицательных значений, но суть решения я передал.
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
using System;
using Random = System.Random;
 
namespace ol3
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] load = Console.ReadLine().Split();
            string[] stroki = new string[105];
            int val=0,x=0,y=0, xn = int.Parse(load[0]), yn = int.Parse(load[1]);
            while (x!=xn || y!=yn && val<106)
            {
                bool pov = true;
                for (int i = 0; i < val; i++)
                {
                    if(stroki[val]==stroki[i])
                    {
                        pov = false;
                    }
                }
                val++;
                if (pov)
                {
                    if (x <= xn && y <= yn && xn - x >= yn - y)
                    {
                        x += 2;
                        y += 1;
                    }
                    else if (x <= xn && y <= yn && xn - x <= yn - y)
                    {
                        x += 1;
                        y += 2;
                    }
                    else if (x >= xn && y <= yn && xn - x >= yn - y)
                    {
                        x += -2;
                        y += 1;
                    }
                    else if (x >= xn && y <= yn && xn - x <= yn - y)
                    {
                        x += -1;
                        y += 2;
                    }
                    else if (x <= xn && y >= yn && xn - x >= yn - y)
                    {
                        x += 2;
                        y += -1;
                    }
                    else if (x <= xn && y >= yn && xn - x <= yn - y)
                    {
                        x += 1;
                        y += -2;
                    }
                    else if (x >= xn && y >= yn && xn - x >= yn - y)
                    {
                        x += -2;
                        y += -1;
                    }
                    else if (x >= xn && y >= yn && xn - x <= yn - y)
                    {
                        x += -1;
                        y += -2;
                    }
                }
                else
                {
                    Random rnd = new Random();
                    int r = rnd.Next(8);
                    if (r==0)
                    {
                        x += 2;
                        y += 1;
                    }
                    else if (r==1)
                    {
                        x += 1;
                        y += 2;
                    }
                    else if (r==2)
                    {
                        x += -2;
                        y += 1;
                    }
                    else if (r==3)
                    {
                        x += -1;
                        y += 2;
                    }
                    else if (r==4)
                    {
                        x += 2;
                        y += -1;
                    }
                    else if (r==5)
                    {
                        x += 1;
                        y += -2;
                    }
                    else if (r==6)
                    {
                        x += -2;
                        y += -1;
                    }
                    else if (r==7)
                    {
                        x += -1;
                        y += -2;
                    }
                }
                stroki[val] = x + " " + y;
                Console.WriteLine(stroki[val]);
 
            }
        }
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2020, 11:57

Задача на перебор вариантов. Задача Л.Эйлера. Про чиновника
Задача Л.Эйлера. Некий чиновник купил лошадей и быков на сумму 1770 талеров. За каждую лошадь он...

Первая смешанная задача для волнового уравнения на отрезке (задача о колебаниях ограниченной струны) методом Фурье
Решить первую смешанную задачу для волнового уравнения на отрезке (задача о колебаниях ограниченной...

Задача о размещении весов по ящикам (задача о рюкзаках)
Есть упорядоченный по невозрастанию набор весов предметов w1..wn, которые необходимо распределить...

Задача линейного программирования, транспортная задача
Всем привет. сижу на экзамене, помогите пожалуйста решить,сроно!!! заранее спасибо.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.