5) Шахматная ладья ходит по горизонтали или вертикали. Даны две различные клетки...

+375 голосов
4.5m просмотров

5) Шахматная ладья ходит по горизонтали или вертикали. Даны две различные клетки шахматной доски, определите, может ли ладья попасть с первой клетки на вторую одним ходом. Формат входных данных Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки. Формат выходных данных Программа должна вывести YES, если из первой клетки ходом ладьи можно попасть во вторую или NO в противном случае. Sample Input: 4 4 5 5 Sample Output: NO НАПИШИТЕ В JAVA, Пожалуйста


Информатика | 4.5m просмотров
Дан 1 ответ
+48 голосов

Ответ:

public class MyClass {

   public static void main(String args[]) {

       System.out.println("4, 4, 5, 5 == " + isValidMove(4, 4, 5, 5));

       System.out.println("4, 4, 4, 7 == " + isValidMove(4, 4, 4, 7));

   }

   

   public static boolean isValidMove(int fromRow, int fromCol, int toRow, int toCol) {

       int i;

   

       // Попытка двинуться в то место где фигура уже стоит

       if (fromRow == toRow && fromCol == toCol)

           return false;

   

       // Collision detection

       if (fromRow == toRow) {

           // горизонтальное движение

           if (fromCol < toCol) {

               // вправо

               for (i = fromCol + 1; i <= toCol; ++i)</p>

                   if (!isValidPosition(fromRow, i))

                       return false;

           } else {

               // влево

               for (i = fromCol - 1; i >= toCol; --i)

                   if (!isValidPosition(fromRow, i))

                       return false;

           }

       } else if (fromCol == toCol) {

           // вертикальное движение

           if (fromRow < toRow) {

               // движение вниз

               for (i = fromRow + 1; i <= toRow; ++i)</p>

                   if (!isValidPosition(i, fromCol))

                       return false;

           } else {

               // движение вверх

               for (i = fromRow - 1; i >= toRow; --i)

                   if (!isValidPosition(i, fromCol))

                       return false;

           }

       } else {

           // не валидное движение

           return false;

       }

   

       return true;

   }

   

   public static boolean isValidPosition(int row, int col) {

       boolean result = false;

       if (row > 0 && row < 7) {

           result = true;

       }

       

       if (col > 0 && col < 7) {

           result = true;

       }

       

       return result;

   }

}

P.S.

Не забывайте нажать "Спасибо", поставить оценку, и если ответ удовлетворил, то выберите его как "Лучший" :)

(422 баллов)