Задача
Алекс любит оригами — японское искусство складывания из бумаги. Большинство конструкций оригами начинаются с квадратного листа бумаги. Алекс собирается сделать подарок для своей матери. Подарочная конструкция требует три одинаковых квадратных листа бумаги, но у Алекса имеется только один прямоугольный лист. Он может из него вырезать квадраты, стороны которых должны быть параллельны сторонам листа. Помогите Алексу определить максимально возможный размер квадратов, который он способен вырезать.
Входные данные
В одной строке два целых числа [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 16 17 18 19 20 |
import static java.lang.Math.max; import java.util.Scanner; class Main { public static void main (String[] args) { double ans = 0; Scanner scanner = new Scanner(System.in); double h = scanner.nextDouble(); double w = scanner.nextDouble(); //swapping value of two numbers without using temp variable if(w < h) { w = w + h; h = w - h; w = w - h; } ans = ( w >= 3 * h ? h : max (h / 2, w / 3) ); System.out.printf("%.4f", ans); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import static java.lang.Math.max; import java.util.Scanner; class Main { public static void main (String[] args) { double tmp = 0, ans = 0; Scanner scanner = new Scanner(System.in); double h = scanner.nextDouble(); double w = scanner.nextDouble(); if(w < h) { tmp = h; h = w; w = tmp; } if(w >= 3 * h) { ans = h; } else { ans = Math.max(h/2, w/3); } System.out.printf("%.4f", ans); } } |
Алгоритм решения`
Допустим, что [latex] w [/latex] всегда больше чем [latex] h [/latex] . Из условия следует, что варианта расположения данных квадратов два: . В первом случае ответом будет [latex] \max\left ( \frac{h}{2}, \frac{w}{3} \right ) [/latex]. Во втором же, ответом будет [latex] h [/latex] .
Детали реализации
- В первой версии программы используется тернарный оператор: ans = ( w >= 3 * h ? h : max (h / 2, w / 3) );
- В обоих версиях программы имя метода max() становится видимым благодаря оператору статического импорта: import static java.lang.Math.max;. Также мы импортируем класс Scanner: import java.util.Scanner;
- Для вывода ответа с точностью не меньше трех десятичных знаков используется форматирование чисел с плавающей точкой.
Ссылки :
Задача на e-olymp
Код № 1 на ideone
Код № 2 на ideone
Засчитанное решение № 1
Засчитанное решение № 2