М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
Lisova1
Lisova1
12.04.2023 04:29 •  Информатика

Требуется определить, бьет ли ферзь, стоящий на клетке с указанными координатами (номер строки и номер столбца), фигуру, стоящую на другой указанной клетке. входные данные вводятся четыре числа: координаты ферзя и координаты другой фигуры. координаты - целые числа в интервале от 1 до 8. выходные данные требуетсявывести слово yes, если ферзь может побить фигуру за 1 ход, в противном случае вывести слово no на python'е

👇
Ответ:
Елена5763
Елена5763
12.04.2023
# coding: utf-8
# Python 3.X

'''
Вводятся четыре числа:
xa, ya: координаты ферзя
xb, yb: координаты другой фигуры

Координаты - целые числа
в интервале от 1 до 8.

Вывод - булево значение:
сможет ли ферзь побить фигуру
за 1 ход.
'''
def hits(xa, ya, xb, yb) -> bool:
    '''
    Проверка аргументов.
    '''
    args = (xa, ya, xb, yb)
    if any([not 1 <= z <= 8 for z in args]):
        raise ValueError("Неверные координаты!")

    '''
    На одной прямой.
    '''
    if xa == xb or ya == yb:
        return True

    '''
    Северо-западная диагональ.
    '''
    x_nw, y_nw = xa, ya
    while x_nw > 1 and y_nw > 1:
        x_nw -= 1
        y_nw -= 1
        if x_nw == xb and y_nw == yb:
            return True

    '''
    Юго-восточная диагональ.
    '''
    x_se, y_se = xa, ya
    while x_se < 8 and y_se < 8:
        x_se += 1
        y_se += 1
        if x_se == xb and y_se == yb:
            return True

    '''
    Юго-западная диагональ.
    '''
    x_sw, y_sw = xa, ya
    while x_sw > 1 and y_se < 8:
        x_sw -= 1
        y_sw += 1
        if x_sw == xb and y_sw == yb:
            return True

    '''
    Северо-восточная диагональ.
    '''
    x_ne, y_ne = xa, ya
    while x_ne < 8 and y_se > 1:
        x_ne += 1
        y_ne -= 1
        if x_ne == xb and y_ne == yb:
            return True

    return False # если не бьет

inp = [int(x) for x in input().split()]
if hits(*inp):
    print('YES')
else:
    print('NO')
4,4(63 оценок)
Ответ:
Мelissa205
Мelissa205
12.04.2023
Добрый день! Разумеется, я могу помочь вам с решением этой задачи.
Для определения, может ли ферзь побить фигуру, стоящую на другой клетке, нам необходимо учесть, что ферзь может двигаться как по вертикали, горизонтали, так и по диагоналям. Мы будем проверять варианты ходов ферзя и сравнивать их с координатами фигуры.

Вот подробное решение задачи на языке Python:

```python
# Ввод координат ферзя и фигуры
queen_row = int(input("Введите номер строки для ферзя (от 1 до 8): "))
queen_column = int(input("Введите номер столбца для ферзя (от 1 до 8): "))
figure_row = int(input("Введите номер строки для фигуры (от 1 до 8): "))
figure_column = int(input("Введите номер столбца для фигуры (от 1 до 8): "))

# Проверка, стоят ли фигура и ферзь на одной вертикали, горизонтали или диагонали
if queen_row == figure_row or queen_column == figure_column or abs(queen_row - figure_row) == abs(queen_column - figure_column):
print("yes")
else:
print("no")
```

Пояснение решения:
1. Мы считываем с клавиатуры номер строки и столбца для ферзя, а также номер строки и столбца для фигуры.
2. Далее мы проверяем три условия:
- Если номер строки ферзя равен номеру строки фигуры или номер столбца ферзя равен номеру столбца фигуры, значит ферзь находится на той же вертикали или горизонтали, что и фигура, и он может ее побить. В этом случае мы выводим "yes".
- Если разница между номером строки ферзя и номером строки фигуры равна разнице между номером столбца ферзя и номером столбца фигуры (взятой по модулю), значит ферзь находится на одной из диагоналей с фигурой, и он может ее побить. В этом случае мы выводим "yes".
- Если ни одно из этих условий не выполняется, значит ферзь и фигура не находятся ни на одной вертикали, ни на одной горизонтали, ни на одной диагонали, и ферзь не может побить фигуру за 1 ход. В этом случае мы выводим "no".

Таким образом, мы получаем ответ на вопрос задачи в виде слова "yes" или "no".
Я надеюсь, что это решение ясно и понятно. Если у вас возникнут дополнительные вопросы, пожалуйста, дайте мне знать.
4,4(66 оценок)
Проверить ответ в нейросети
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ