Известно, что на доске 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;
}
Я думаю, что проблема моего кода заключается в том, что он рассматривает только текущую и следующую позицию. Но я не понимаю как реализовать код правильно.
Да хотя бы так...
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;
}
}
}
// 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++;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как через jquery создать элемент с несколькими классами? Нужно получить что-то типа такого:
Помогите, кто знаетВхожу через adminer в mariadb, через root все работает