Ходы cлона

Уровень сложности:

Вот условие задачи: есть координаты двух клеток шахматной доски. Вывести Yes, если слон может за один ход перейти с одной клетки в другую. В другом случае вывести No.

Входные данные(например): 1 1 3 3
Выходные данные: Yes

Пример работы программы:

CppStudio.com
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;
}

Логика работы программы — правильная, но вот неплохо было бы доработать программу на предмет различных проверок входных данных. Ведь, если сейчас в программу ввести некорректные данные, она просто завершит свою работу. Смотрим результат работы программы:

CppStudio.com
Enter x1: 3
Enter y1: 4
Enter x2: 1
Enter y2: 1
No

Что тут можно сказать? Слон стоит в клетке с координатами 1 и 1, так как слон ходит только по диагонали на любое количество клеток, в ячейку (3,4) он попасть не может, соответственно, на выходе, программа показала — No.

Следующие статьи помогут вам в решении данной задачи:
Автор: Marienko L.
Дата: 12.11.2013
Поделиться:

Комментарии

  1. 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;
    }

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.