Другие языки программирования и технологии

Помогите пожалуйста, очень нужно....

Вот условие: Поле шахматной доски определяется парой натуральных чисел: первое число - номер вертикали, второе - номер горизонтали (вертикали нумеруются слева направо, горизонтали - снизу вверх). Шахматная доска имеет размер 8х8. Даны натуральные числа i, j, k, l. Определить, можно ли с поля (i,j) одним ходом коня попасть на поле (k,l). Если нет, то выяснить, можно ли это сделать за два хода, если можно, то указать поле, на которое приводит первый ход (конь ходит буквой Г) Решение(1ход) Что дальше делать? Как записать 2 ход? #include <stdio.h> #include <math.h> #include <conio.h> int main() { //Ввод исходных данных unsigned int i, j, k, l; i = j = k = l = 0; printf("i= "); scanf("%d", &i); printf("j= "); scanf("%d", &j); printf("k= "); scanf("%d", &k); printf("l= "); scanf("%d", &l); if (i>0 && i<9 && j>0 && j<9 && k>0 && k<9 && l>0 && l<9) { //Если введенные координаты не выходят за рамки доски if ((k==i+2 && (l==j+1 || l==j-1)) || (k==i-2 && (l==j+1 || l==j-1)) || (k==i+1 && (l==j+2 || l==j-2)) || (k==i-1 && (l==j+2 || l==j-2))) printf("Можно в попасть в клетку %d-%d за 1 ход\n", k, l); else printf("Совершить данное перемещение за 1 ход невозможно!\n"); } else printf("Одна или более координат не принадлежат шахматной доске. Решение задачи невозможно!\n"); getch(); //Возвращает ноль при правильном return 0; //завершении програмы }
Может поможет подаю идею с кодом сама разберешься
х-по горизонтали
у-по вертикали
а-конь по горизонталь
б-конь по вертикали
1-й когда конь доходит за один ход. Смещение по координатам может быть либо на 2 либо на 1 - >
Можно организовать проверку : (прим. |а|-число по модулю)
Если (|а-х| = 1 и |б-у| = 2) или (|а-х| = 2 и |б-у| = 1) то Конь доходит за один ход
2-й конь за два хода здесь получается всевозможные смещения на 2 хода 1:1, 3:3, 1:3, 0:2, 4:2,4:0 и наоборот 1:1, 3:3, 3:1, 2:0, 2:4,0:4
Проверки
Если (|а-х| = 1 и |б-у| = 1) или
(|а-х| = 3 и |б-у| = 3) или
(|а-х| = 1 и |б-у| = 3) или
(|а-х| = 3 и |б-у| = 1) или
(|а-х| = 0 и |б-у| = 2) или
(|а-х| = 2 и |б-у| = 0) или
(|а-х| = 4 и |б-у| = 2) или
(|а-х| = 2 и |б-у| = 4) или
(|а-х| = 4 и |б-у| = 0) или
(|а-х| = 0 и |б-у| = 4) то за 2 хода
Kylych Jakipov
Kylych Jakipov
325
Лучший ответ
Вообще в таких случаях надо информировать о достигнутом уровне. Совершенно непонятно, вы уже проходили массивы иди нет, функции, а то приходится корячиться с ветвлением, а вдруг вам ещё и циклы не давали, то вообще засада! Ну а логика здесь для школы сложная, кто же вам такие задачки-то задаёт?
Николай Саакян
Николай Саакян
92 150
ну тут, на самом деле, все варианты высчитывать программно нужды нет: ) просто на тетрадке клетчатой нарисуй такую доску. Пусть стартовая позиция коня будет где-нибудь ближе к центру доски. Проставь точки или галочки для всех возможных ходов коня. Затем цветными карандашами (для наглядности) заштрихуй все клеточки для второго хода - для каждой из позиций после первого хода отдельным цветом. Когда закончишь, останется не так много клеток свободных - вот их и надо будет проверять как координаты поля, на которое мы попадаем после второго хода. Не в безусловных координатах, конечно, а в виде (и-1)||(и+1)||(ж-1)||(ж+1) и. т. д
И еще, сразу можно ввести ограничение, что если |и-к| или |ж-л| > 4, то не попадаем, как ни старайся:)
Это у вас такое в школе о_0
Dovlet Annamuradov
Dovlet Annamuradov
193

Похожие вопросы