Задача. На шахматной доске стоят три ферзя (ферзь бьет по вертикали, горизонтали и диагоналям). Найти те пары из них, которые угрожают друг другу.
[latex]x_{1}[/latex] | [latex]y_{1}[/latex] | [latex]x_{2}[/latex] | [latex]y_{2}[/latex] | [latex]x_{3}[/latex] | [latex]y_{3}[/latex] | Результаты | Комментарий |
6 | 8 | 3 | 5 | 6 | 3 | Пара ферзей 1 и 2 угрожают друг другу
Пара ферзей 1 и 3 угрожают друг другу |
Пройден |
1 | 5 | 6 | 8 | 7 | 3 | Никто никому не угрожает | Пройден |
3 | 3 | 8 | 8 | 7 | 1 | Пара ферзей 1 и 2 угрожают друг другу | Пройден |
2 | 8 | 4 | 7 | 7 | 4 | Пара ферзей 2 и 3 угрожают друг другу | Пройден |
Тесты:
Код на С
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 |
#include <stdio.h> int main() { int x1,x2,x3,y1,y2,y3,k; //определим координаты фигур на доске scanf("%d %d %d %d %d %d", &x1, &y1, &x2, &y2, &x3, &y3 ); k=0; //начнем последовательную проверку на угрозу в каждой паре ферзей if ((x1==x2)||(y1==y2)||(abs(x1-x2)==abs(y1-y2))) { printf("Пара ферзей 1 и 2 угрожают друг другу\n"); k++; } if ((x1==x3)||(y1==y3)||(abs(x1-x3)==abs(y1-y3))) { printf("Пара ферзей 1 и 3 угрожают друг другу\n"); k++; } if ((x2==x3)||(y2==y3)||(abs(x2-x3)==abs(y2-y3))) { printf("Пара ферзей 2 и 3 угрожают друг другу\n"); k++; } if (k==0) printf("Никто никому не угрожает\n"); 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 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in=new Scanner(System.in); int x1, x2, x3, y1, y2, y3, k; k=0; x1=in.nextInt(); y1=in.nextInt(); x2=in.nextInt(); y2=in.nextInt(); x3=in.nextInt(); y3=in.nextInt(); if ((x1==x2)||(y1==y2)||(Math.abs(x1-x2)==Math.abs(y1-y2))){ System.out.println("Пара ферзей 1 и 2 угрожают друг другу"); k++; } if ((x1==x3)||(y1==y3)||(Math.abs(x1-x3)==Math.abs(y1-y3))){ System.out.println("Пара ферзей 1 и 3 угрожают друг другу"); k++; } if ((x2==x3)||(y2==y3)||(Math.abs(x2-x3)==Math.abs(y2-y3))){ System.out.println("Пара ферзей 2 и 3 угрожают друг другу"); k++; } if (k==0) System.out.println("Никто никому не угрожает"); } } |
Решение:
В случае если фигуры стоят на одной вертикали или горизонтали соответствующие координаты будут равны. Таким образом, проверяя на равенство координаты, узнаем о существовании угрозы. В случае если фигуры стоят на одной диагонали можно заметить, что [latex] \left|x_{1}-x_{2 }\right|=\left|y_{1}-y_{2} \right|[/latex]. Таким образом, проверив и это условие, точно определим есть угроза или нет.
Также надо отметить тот случай, когда не существует никакой угрозы . Для этого введем счетчик [latex]k[/latex]. Если между какой-либо парой фигур есть угроза, то [latex]k[/latex] увеличивается на единицу. Если после проверки вышеупомянутых условий [latex]k[/latex] остается равным нулю, то делаем вывод, что никто никому не угрожает.
«Пара ферзей 1 и 2 угрожают друг другуПара ферзей 1 и 3 угрожают друг другу» в результатах забыли перевести строчку (в коде все в порядке).
«В случае если фигуры стоят на одной диагонали можно заметить, что» в переменных x1, x2, y1, y2 цифры не являются индексами.
Оператор « if (k==0)» имеет почему-то чуть больший отступ.
Исправила.
Засчитано, 10 баллов.