Задача
Алекс любит оригами — японское искусство складывания из бумаги. Большинство конструкций оригами начинаются с квадратного листа бумаги. Алекс собирается сделать подарок для своей матери. Подарочная конструкция требует три одинаковых квадратных листа бумаги, но у Алекса имеется только один прямоугольный лист. Он может из него вырезать квадраты, стороны которых должны быть параллельны сторонам листа. Помогите Алексу определить максимально возможный размер квадратов, который он способен вырезать.
Входные данные
В одной строке два целых числа [latex] h [/latex] и [latex] w [/latex] [latex] \left ( 1\leqslant h,w\leqslant 1000 \right ) [/latex] — высота и ширина куска бумаги.
Выходные данные
Выведите одно действительное число — наибольшую длину стороны квадратов. Всегда можно вырезать три одинаковых квадрата из листа бумаги размером [latex] h \times w[/latex] так, чтобы их стороны были параллельны сторонам листа.
Ответ следует вывести с точностью не меньше трех десятичных знаков.
Тесты
Входные данные | Выходные данные |
---|---|
30 11 | 10.0000 |
8 3 | 2.6667 |
210 297 | 105.0000 |
60 59 | 29.5000 |
250 100 | 83.3333 |
Программный код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <iostream> #include <algorithm> #include <cmath> #include <iomanip> using namespace std; int main() { double h, w, ans = 0; cin >> h >> w; if (w < h) { swap (w, h); } ans = ( w >= 3 * h ? h : max (h / 2, w / 3) ); cout << fixed << setprecision(4) << ans; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> #include <cmath> #include <iomanip> using namespace std; int main() { double h, w, tmp = 0, ans = 0; cin >> h >> w; if (w < h) { tmp = h; h = w; w = tmp; } if (w >= 3 * h) { ans = h; } else { ans = max (h / 2, w / 3); } cout << fixed << setprecision(4) << ans; } |
Алгоритм решения
Допустим, что [latex] w [/latex] всегда больше чем [latex] h [/latex] . Из условия следует, что варианта расположения данных квадратов два:
В первом случае ответом будет [latex] \max\left ( \frac{h}{2}, \frac{w}{3} \right ) [/latex]. Во втором же, ответом будет [latex] h [/latex] .
Детали реализации
- В первом коде программы используется используется библиотека
#include <algorithm> , которая включает в себя функцию swap() , так же, используется библиотека #include <cmath> , которая включает в себя функцию max() . - Для вывода ответа с точностью не меньше трех десятичных знаков используется библиотека
#include <iomanip> и манипуляторы fixed и setprecision() .
Ссылки :
Задача на e-olymp
Код № 1 на ideone
Код № 2 на ideone
Засчитанное решение № 1
Засчитанное решение № 2
Очень обстоятельно все описали. Давайте только поправим мелочи:
— использование глагола «служить» в таком предложении диссонирует. Можете его удалить или это элементы авторского стиля.
— Фраза «случая расположения данных квадратов два» не согласована. Если их два, то «случаев». А еще лучше, сделайте фразу проще.
— Ну и пробелы перед двоеточием это такой декаданс…
🙂
Благодарю Вас, все исправила.