Задача: На шахматной доске стоят черный король и три белые ладьи (ладья бьет по горизонтали и вертикали). Проверить, не находится ли король под боем, а если есть угроза, то от кого именно.
x | y | x1 | y1 | x2 | y2 | x3 | y3 | |
3 | 6 | 1 | 1 | 3 | 7 | 2 | 5 | Угроза от второй ладьи |
1 | 2 | 7 | 8 | 4 | 6 | 3 | 6 | Угрозы нет |
1 | 2 | 5 | 4 | 3 | 7 | 1 | 2 | Ошибка |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#include <iostream> using namespace std; int main() { int x,y,x1,y1,x2,y2,x3,y3; //Вводим координаты фигур на шахматной доске(от 1 до 8) scanf("%d", &x); scanf("%d", &y);//Координаты короля scanf("%d", &x1); scanf("%d", &y1);//Координаты первой ладьи scanf("%d", &x2); scanf("%d", &y2);//Координаты второй ладьи scanf("%d", &x3); scanf("%d", &y3);//Координаты третьей ладьи if (((x!=x1) || (y!=y1)) && ((x!=x2) || (y!=y2)) && ((x!=x3) || (y!=y3)) && ((x1!=x2) || (y1!=y2)) && ((x1!=x3) || (y1!=y3)) && ((x2!=x3) || (y2!=y3))) { if ((x==x1) || (y==y1)) { printf(" x = %d; y = %d \n x1 = %d; y1 = %d \n Угроза от первой ладьи\n", x, y, x1, y1); } else { if ((x==x2) || (y==y2)) { printf(" x = %d; y = %d \n x2 = %d; y2 = %d \n Угроза от второй ладьи\n", x, y, x2, y2); } else { if ((x==x3) || (y==y3)) { printf(" x = %d ; y = %d \n x3 = %d ; y3 = %d \n Угроза от третьей ладьи\n", x, y, x3, y3); } else { printf(" x = %d ; y = %d \n x1 = %d ; y1 = %d \n x2 = %d ; y2 = %d \n x3 = %d ; y3 = %d \n Угрозы нет", x, y, x1, y1, x2, y2, x3, y3); } } } } else { printf("Ошибка"); } return 0; } |
Код программы на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
import java.util.*; import java.lang.*; import java.io.*; class Chess { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); //Вводим координаты фигур на шахматной доске(от 1 до 8) int x = in.nextInt(); int y = in.nextInt();//Координаты короля int x1 = in.nextInt(); int y1 = in.nextInt();//Координаты первой ладьи int x2 = in.nextInt(); int y2 = in.nextInt();//Координаты второй ладьи int x3 = in.nextInt(); int y3 = in.nextInt();//Координаты третьей ладьи if (((x!=x1) || (y!=y1)) && ((x!=x2) || (y!=y2)) && ((x!=x3) || (y!=y3)) && ((x1!=x2) || (y1!=y2)) && ((x1!=x3) || (y1!=y3)) && ((x2!=x3) || (y2!=y3))) { if ((x==x1) || (y==y1)) { System.out.format(" x = %d; y = %d \n x1 = %d; y1 = %d \n Угроза от первой ладьи\n", x, y, x1, y1); } else { if ((x==x2) || (y==y2)) { System.out.format(" x = %d; y = %d \n x2 = %d; y2 = %d \n Угроза от второй ладьи\n", x, y, x2, y2); } else { if ((x==x3) || (y==y3)) { System.out.format(" x = %d ; y = %d \n x3 = %d ; y3 = %d \n Угроза от третьей ладьи\n", x, y, x3, y3); } else { System.out.format(" x = %d ; y = %d \n x1 = %d ; y1 = %d \n x2 = %d ; y2 = %d \n x3 = %d ; y3 = %d \n Угрозы нет", x, y, x1, y1, x2, y2, x3, y3); } } } } else { System.out.println("Ошибка"); } } } |
Последний тест (все координаты равны нулю) вообще некорректен, т.к.
1) Координаты от 1 до 8 (0 неверная координата),
2) король и все 3 ладьи стоят в одной клетке, что невозможно.
Наверное и в программе желательно проверить бы входные данные на корректность.
Исправил. Теперь если две фигуры стоят в одной клетке, то программа выдает ошибку.
« if (((x!=x1) & (y!=y1)) | ((x!=x2) & (y!=y2)) | ((x!=x3) & (y!=y3)) | ((x1!=x2) & (y1!=y2)) | ((x1!=x3) & (y1!=y3)) | ((x2!=x3) & (y2!=y3)))»
странное условие, может имеются в виду логические И и ИЛИ (&& ||) или точно поразрядные? И все равно, Вы наверное имели в виду, что или координата по x отличается у короля и первой ладьи или по y, то же для второй и т.д.
т.е. if ( ((x!=x1) || (y!=y1)) && ... )
Засчитано, 10 баллов — но следите за отступами внимательнее в следующий раз, есть мелкие нарушения.
Поправьте, пожалуйста, отступы в Java-версии.