Вот условие задачи: есть координаты двух клеток шахматной доски. Вывести Yes, если слон может за один ход перейти с одной клетки в другую. В другом случае вывести No.
Выходные данные: Yes
Пример работы программы:
Enter x1: 3 Enter y1: 4 Enter x2: 1 Enter y2: 1 No
Первым решение предоставил пользователь нашего сайта — NaikoN, спасибо. Вот решение этой задачи:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int x1,x2,y1,y2,maxx,minx,maxy,miny;
cout<<"Enter x1: ";
cin>>x1;
cout<<"Enter y1: ";
cin>>y1;
cout<<"Enter x2: ";
cin>>x2;
cout<<"Enter y2: ";
cin>>y2;
///Находим min и max по x и y
maxx=max(x1,x2);
maxy=max(y1,y2);
minx=min(x1,x2);
miny=min(y1,y2);
///Слон может попасть на нужную клетку, только
///если |x1-x2|=|y1-y2| (значения по модулю)
if(maxx-minx==maxy-miny)
{
cout<<"Yes";
return 0;
}
cout<<"No";
return 0;
}
Логика работы программы — правильная, но вот неплохо было бы доработать программу на предмет различных проверок входных данных. Ведь, если сейчас в программу ввести некорректные данные, она просто завершит свою работу. Смотрим результат работы программы:
Enter x1: 3 Enter y1: 4 Enter x2: 1 Enter y2: 1 No
Что тут можно сказать? Слон стоит в клетке с координатами 1 и 1, так как слон ходит только по диагонали на любое количество клеток, в ячейку (3,4) он попасть не может, соответственно, на выходе, программа показала — No.
Комментарии
Vova_vb
#include<iostream> using namespace std; int main() { int x1, y1; int x2, y2; bool otv = false; cin >> x1; cin >> y1; cin >> x2; cin >> y2; for(int i = 0; i < 8; i++) { if(x1 == x2+i && y1 == y2+i) otv = true; if(x1 == x2-i && y1 == y2-i) otv = true; } cout << boolalpha << otv << endl; return 0; }