Необходимо определить, может ли пара ферзей напасть на друг друга, если известны координаты 8 ферзей

129
13 февраля 2022, 13:40

Известно, что на доске 8×8 можно расставить 8 ферзей так, чтобы они не били друг друга. Вам дана расстановка 8 ферзей на доске, определите, есть ли среди них пара бьющих друг друга.

Формат входных данных
Программа получает на вход восемь пар чисел, каждое число от 1 до 8 - координаты 8 ферзей.

Формат выходных данных
Если ферзи не бьют друг друга, выведите слово NO, иначе выведите YES.

Входные данные:

7 8
2 2
8 5
4 3
5 7
1 4
6 1
3 6

Ответ: YES

Мой ответ: NO

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
    vector<int> vertical(8);
    vector<int> gorizontal(8);
    for (int i = 0; i < 8; i++) {
        cin >> vertical[i];
        cin >> gorizontal[i];
    }
    int b = 0;
    for (int i = 0; i < 8; i++) {
        if (gorizontal[i] == gorizontal[i + 1])
            b += 1;
        else if (vertical[i] == vertical[i + 1])
            b += 1;
        else if (abs(vertical[i] - vertical[i + 1]) == abs(gorizontal[i + 1] - gorizontal[i]))
            b += 1;
    }
    if (b != 0)
        cout << "YES";
    else
        cout << "NO";
    return 0;
}

Я думаю, что проблема моего кода заключается в том, что он рассматривает только текущую и следующую позицию. Но я не понимаю как реализовать код правильно.

Answer 1

Да хотя бы так...

for(int i = 0; i < 8; i++){
for(int j = i+1; j < 8; j++){
    if(gorizontal[i] == gorizontal[j]) {
        b += 1;   
    }
    else if(vertical[i] == vertical[j]){
        b += 1;   
    }
    else if (abs(vertical[i] - vertical[j]) == abs(gorizontal[j] - gorizontal[i])){
        b += 1; 
    }
    else if (abs(vertical[j] - vertical[i]) == abs(gorizontal[i] - gorizontal[j])){
        b += 1;     
    }
}
}
Answer 2
// EDIT: b уже объявлялся, но для понимания можно использовать b вместо i
// так как "Ферзь A сравнивается с ферзем B"
for (size_t a = 0; a < 8; a++)
    for (size_t i = a + 1; i < 8; i++)
        if (gorizontal[a] == gorizontal[i]
         || vertical[a] == vertical[i]
         || abs(vertical[a] - vertical[i]) == abs(gorizontal[a] - gorizontal[i])
        ) b++;
READ ALSO
Jquery append элемента с несколькими классами

Jquery append элемента с несколькими классами

Как через jquery создать элемент с несколькими классами? Нужно получить что-то типа такого:

134
Не могу войти через adminer в базу

Не могу войти через adminer в базу

Помогите, кто знаетВхожу через adminer в mariadb, через root все работает

167
Перевести mysql запрос в laravel

Перевести mysql запрос в laravel

есть запрос на mysql

122