Предмет: Информатика, автор: stolasgaetia

Три сына

Ограничение времени 1 секунда

Ограничение памяти 64Mb

Ввод стандартный ввод или division.in

Вывод стандартный вывод или division.out

Во владениях короля Флатландии находится прямая дорога длиной n километров, по одну сторону от которой расположен огромный лесной массив. Король Флатландии проникся идеями защиты природы и решил превратить свой лесной массив в заповедник. Но сыновья стали сопротивляться: ведь им хотелось получить эти земли в наследство.


У короля три сына: младший, средний и старший. Король решил, что в заповедник не войдут участки лесного массива, которые он оставит сыновьям в наследство. При составлении завещания король хочет, чтобы для участков выполнялись следующие условия:


каждый участок должен иметь форму квадрата, длина стороны которого выражается целым положительным числом. Одна из сторон каждого квадрата должна лежать на дороге. Пусть участки имеют размеры a × a, b × b и c × c;

стороны квадратов должны полностью покрывать дорогу, т.е. a + b + c = n;

участок младшего сына должен быть строго меньше участка среднего сына, а участок среднего сына должен, в свою очередь, быть строго меньше участка старшего сына, то есть должно выполняться неравенство a < b < c;

суммарная площадь участков a2 + b2 + c2 должна быть минимальна.

Требуется написать программу, которая по заданной длине дороги определяет размеры участков, которые следует выделить сыновьям короля.


Формат ввода

Входной файл содержит одно целое число n (6 ≤ n ≤ 109).


Формат вывода

Выходной файл должен содержать три целых положительных числа, разделенных пробелами: a, b и c – длины сторон участков, которые следует выделить младшему, среднему и старшему сыну, соответственно. Если оптимальных решений несколько, разрешается вывести любое.


Пример

Ввод Вывод

6 1 2 3
написать надо на C++
Помогите пожалуйста


p15: если мне правильно помнится, то может быть такие n, при которых нельзя разложить на три квадрата, но на четыре квадрата всегда можно. Но уверен что никто не сделает здесь.
p15: Ну разве что ИИ
stolasgaetia: Не, уже сделали
stolasgaetia: а ИИ не помог
artemchik1032: я с ии сделал
p15: Перечитал условие - легкая. Думал о другом. На пайтоне 2 строки

Ответы

Автор ответа: artemchik1032
0

Ответ:

Вот простое решение на C++, которое решает данную задачу.

#include <iostream>

int main() {

   int n;

   std::cin >> n;

    int quotient = n / 3;

   int remainder = n % 3;

    if (remainder == 0) {

       std::cout << quotient << " " << quotient << " " << quotient;

   } else if (remainder == 1) {

       std::cout << quotient << " " << quotient << " " << quotient + 1;

   } else {

       std::cout << quotient << " " << quotient + 1 << " " << quotient + 1;

   }

    return 0;

}

Этот код сначала проверяет, делится ли длина дороги на три без остатка. Если это так, то каждому сыну достанется участок одинакового размера. Если остается остаток 1, то старшему сыну достанется участок большего размера. Если остается остаток 2, то среднему и старшему сыну достанутся участки большего размера.

Объяснение:

Похожие вопросы
Предмет: Английский язык, автор: Leshenko2011
Предмет: Биология, автор: ayvazyagafarov