На шахматной доске в клетке (x1, y1) находится шахматный ферзь. Определите, бьет ли он

На шахматной доске в клетке (x1, y1) находится шахматный ферзь. Определите, бьет ли онклетку (x2, y2). На вход программе даются четыре целых числа x1, y1, x2, y2 (1≤x1,y1,x2,y2≤8) — координаты двух полей на шахматной доске размера 8×8. требуется вывести 1, если ферзь бьет клетку, или 0, если нет.С++
Гость
Ответ(ы) на вопрос:
Гость
Ферзь, стоящий в точке , может бить фигуры, у которых:     1)     2)     3) координаты находятся по диагонали от ферзя. Имеем не самую лучшую и чистую, но рабочую программку: #include <cstdio> int main() {   int x1, x2, y1, y2, x_d1, y_d1, x_d2, y_d2;   printf("x1=");   scanf("%d", &x1);   printf("y1=");   scanf("%d", &y1);   printf("x2=");   scanf("%d", &x2);   printf("y2=");   scanf("%d", &y2);   /* Проверка на линейные совпадения */   if ( (x1 == x2) or (y1 == y2) ) {     printf("1");     return 1;   }   /* Поиск пересечения с диагональю 1 */   x_d1 = x1;   y_d1 = y1;   while ( (x_d1 > 1) and (y_d1 > 1) ) {     x_d1--;     y_d1--;     if ( (x2 == x_d1) and (y2 == y_d1) ) {       printf("1");       return 1;     }   }   while ( (x_d1 < 8) and (y_d1 < 8) ) {     x_d1++;     y_d1++;     if ( (x2 == x_d1) and (y2 == y_d1) ) {       printf("1");       return 1;     }   }   /* Поиск пересечения с диагональю 2 */   x_d2 = x1;   y_d2 = y1;   while ( (x_d2 < 8) and (y_d1 > 1) ) {     x_d1++;     y_d1--;     if ( (x2 == x_d2) and (y2 == y_d2) ) {       printf("1");       return 1;     }   }   while ( (x_d1 > 1) and (y_d1 < 8) ) {     x_d1--;     y_d1++;     if ( (x2 == x_d2) and (y2 == y_d2) ) {       printf("1");       return 1;     }   }     printf("0");   return 0; }
Не нашли ответ?
Ответить на вопрос
Похожие вопросы