Изменить комнату так, чтобы все n студентов могли жить в ней - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста решить: В связи с началом учебного года во многих общежитиях возникли проблемы с поселением студентов. В одном из таких общежитий есть чудо-комната размером a × b квадратных метров. Комендант хочет поселить в нее ровно n студентов. Но, по закону, на одного жильца должно быть не меньше 6 квадратных метров жилой площади (то есть, комната для n студентов должна иметь площадь не менее 6n квадратных метров). Комендант может увеличить любую из сторон комнаты (возможно, обе) на произвольное целое положительное количество метров. Помогите коменданту изменить комнату так, чтобы все n студентов могли жить в комнате, и итоговая площадь комнаты была как можно меньше.

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

В единственной строке через пробел записано три целых числа n, a и b (1 ≤ n, a, b ≤ 109) — количество студентов и размеры комнаты.

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

Выведите три целых числа s, a1 и b1 (a ≤ a1; b ≤ b1) — итоговая площадь комнаты и ее размеры. Если существует несколько оптимальных решений, выведите любое.

Примеры тестов

входные данные

3 3 5

выходные данные

18 3 6

входные данные

2 4 4

выходные данные

16 4 4

Решение задачи: «Изменить комнату так, чтобы все n студентов могли жить в ней»

textual
Листинг программы
uses crt;
var n,a,b,i,ai,bi,aj,bj:longint;
begin
    clrscr;
    read(n,a,b);
    if n * 6 <= a * b then writeln(a*b,' ',a,' ',b)
    else if frac(n * 6 / a) = 0 then writeln(n * 6,' ',a,' ',trunc(n * 6 / a))
    else if frac(n * 6 / b) = 0 then writeln(n * 6,' ',trunc(n * 6 / b),' ',b)
    else
        begin
            ai:=a;
            aj:=a;
            bi:=b;
            bj:=b;
            repeat
                bi:=bi+1;
            until (a * bi > n * 6);
            repeat
                ai:=ai+1;
            until (ai * b > n * 6);
            repeat
                aj:=aj+1;
                bj:=bj+1;
            until (n * 6 <= aj * bj);
            if (ai * b <= a * bi) and (ai * b <= aj * bj) then writeln(ai * b,' ',ai,' ',b)
            else if (a * bi <= ai * b) and (a * bi <= aj * bj) then writeln(a * bi,' ',a,' ',bi)
            else writeln(aj * bj,' ',aj,' ',bj);
        end;
    readln;
end.

Объяснение кода листинга программы

  1. Объявление переменных: n, a, b, i, ai, bi, aj, bj: longint;
  2. Очистка экрана с помощью функции clrscr;
  3. Чтение значений переменных n, a, b с помощью функции read;
  4. Проверка условия: если n 6 <= a b, то выводится значение a*b, за ним значения a и b;
  5. Если условие не выполняется, то проверяется следующее условие: если frac(n 6 / a) = 0, то выводится значение n 6, за ним значения a и b;
  6. Если и это условие не выполняется, то проверяется следующее условие: если frac(n 6 / b) = 0, то выводится значение n 6, за ним значения a и b;
  7. Если и это условие не выполняется, то выполняется следующий код:
    • Определяются значения переменных ai, aj, bi, bj равными a и b;
    • В цикле repeat происходит увеличение значения переменной bi до тех пор, пока a bi не станет больше n 6;
    • Если условие не выполняется, то в цикле repeat происходит увеличение значения переменной ai до тех пор, пока ai b не станет больше n 6;
    • Если и это условие не выполняется, то в цикле repeat происходит увеличение значений переменных aj и bj до тех пор, пока n 6 не станет меньше aj bj;
    • Проверяется условие: если ai b <= a bi и ai b <= aj bj, то выводится значение ai * b, за ним значения a и b;
    • Если это условие не выполняется, то проверяется следующее условие: если a bi <= ai b и a bi <= aj bj, то выводится значение a * bi, за ним значения a и bi;
    • Если и это условие не выполняется, то выводится значение aj * bj, за ним значения aj и bj;
  8. Чтение символа с помощью функции readln;
  9. Конец программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы