Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Ход конем


Автор: aerarian 30.6.2016, 11:27
Помогите решить:
 
Заданы координаты двух полей на шахматной доске: px1 py1 и px2
py2. Гарантируется (т.е. не надо это в программе проверять), что все
координаты корректные, т.е. целые и лежат в диапазоне [1,8].
Требуется вывести Possible, если шахматный конь может за один ход
попасть из одного поля в другое и Impossible в противном случае

Вход 
1 2 
2 4

5 6 
5 7

4 7 
5 5

Выход
Possible

Impossible

Possible

Автор: aerarian 1.7.2016, 13:11
ПОМОГИТЕ! smile))

Автор: baldman88 1.7.2016, 15:55
По идее должно работать:
Код
if ((abs(px1 - px2) + abs(py1 - py2)) == 3) {
    std::cout << "Possible" << std::endl;
} else {
    std::cout << "Impossible" << std::endl;
}


Автор: volatile 1.7.2016, 18:45
Цитата(baldman88 @ 1.7.2016,  15:55)
Код
if ((abs(px1 - px2) + abs(py1 - py2)) == 3) {
    std::cout << "Possible" << std::endl;
} else {
    std::cout << "Impossible" << std::endl;
}

неа, неверно

думаю, как-то так:
Код

bool is_possible (int px1, int py1, int px2, int py2)
{
   int dx = abs (px1 - px2);
   int dy = abs (py1 - py2);
   return std::min (dx, dy) == 1 &&
          std::max (dx, dy) == 2;
}

Автор: baldman88 1.7.2016, 18:56
Точно. Сначала пришло примерно то же самое в голову. А потом решил упростить, но не учел ситуацию, когда разницы могут получиться 0 и 3. Преждевременная оптимизация -- корень зла.

Автор: bsa 12.8.2016, 15:23
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)