На шахматной доске в клетке (x1, y1) находится шахматный ферзь. Определите, бьет ли он клетку (x2, y2). На вход программе даются четыре целых числа x1, y1, x2, y2 (1≤x1,y1,x2,y2≤8) — координаты двух полей на шахматной доске размера 8×8. требуется вывести 1, если ферзь бьет клетку, или 0, если нет.С++
Answers & Comments
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;
}