• На шахматной доске в клетке (x1, y1) находится шахматный ферзь. Определите, бьет ли он клетку (x2, y2). На вход программе даются четыре целых числа x1, y1, x2, y2 (1≤x1,y1,x2,y2≤8) — координаты двух полей на шахматной доске размера 8×8. требуется вывести 1, если ферзь бьет клетку, или 0, если нет.С++

Ответы 1

  • Ферзь, стоящий в точке (x_1;y_1), может бить фигуры, у которых:    1) x = x_1    2) y = y_1    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;}
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years