Слоники ( с++ )
Артём очень любит играть в шахматы. А ещё он любит слонов! У Артёма есть много слонов. Ему интересно, какое минимальное количество слонов можно расставить на шахматной доске размера n×n так, чтобы они били всё поле (любая клетка должна находиться на одной диагонали хотя бы с одним слоном; считается, что слон бьёт и ту клетку, на которой стоит).
Напишите программу, которая по введённому размеру стороны доски n выведет ответ на задачу.
Входные данные
Вводится единственное число n, 1⩽n⩽1018.
Выходные данные
Выведите ответ на поставленную задачу.
Примеры
Ввод
Вывод
4
4
C/C++
Слоники ( с++ ) срочно
long n;
cin >> n;
cout
Данная задача связана с расстановкой ферзей на шахматной доске, где требуется расставить наименьшее количество слонов таким образом, чтобы они покрывали все клетки на доске. Решение задачи можно получить следующим образом:
- Разобьем доску на черные и белые клетки (как на шахматной доске). Заметим, что любая диагональ с четным номером (1-я, 3-я, 5-я и т.д.) состоит либо только из белых, либо только из черных клеток.
- Значит, достаточно поставить на каждую такую диагональ по одному слону, чтобы покрыть все клетки на доске.
- Остаются диагонали с нечетным номером (2-я, 4-я, 6-я и т.д.), состоящие из чередующихся белых и черных клеток.
- Заметим, что любую такую диагональ можно покрыть не более чем двумя слонами. Действительно, если на диагонали есть хотя бы две клетки одного цвета, то можно поставить слона на одну из них и покрыть все клетки диагонали, а если клетки разного цвета, то можно поставить слона на каждую из них и покрыть все клетки диагонали.
- Таким образом, для покрытия всех клеток на доске необходимо не более чем 2n-1 слонов.
- Однако, если на доске расположено более чем n слонов, то как минимум один из них будет находиться на диагонали, уже покрытой другим слоном. Следовательно, минимальное количество слонов, необходимых для покрытия всех клеток на доске, равно n, если n нечетное, и n+1, если n четное.
#include <iostream>
using namespace std;
int main() {
long long n;
cin >> n;
if (n % 2 == 0) cout << 2 * n - 1 << endl;
else cout << 2 * n << endl;
return 0;
}
using namespace std;
int main() {
long long n;
cin >> n;
if (n % 2 == 0) cout << 2 * n - 1 << endl;
else cout << 2 * n << endl;
return 0;
}
Rosa999@mail.ru Vovin
Программа выдает 7, а надо 4
Похожие вопросы
- Нужно срочно решить задачу на C++
- Составить программу c++ срочно пожалуйста
- Срочно!!! Помогите пожалуйста написать код к задачке на с++! Заранее спасибо!
- С++. Срочно пожалуйста помогите
- Что нужно добавить в код, с++, очень нужно срочно
- Срочно нужна помощь (Дана строка, содержащая зашифрованный русский текст. решить нужно на с++
- ПОМОГИТЕ ОЧЕНЬ СРОЧНО C++
- ПОМОГИТЕ ОЧЕНЬ СРОЧНО C++.
- Одномерный массив нужна программа срочно)
- Помогите срочно двумерные массивы в с++
Да неужели? И даже на доске 2×2 требуется три слона?