Задача. Какого наибольшего размера прямоугольник можно вырезать из круга диаметра [latex]d[/latex], если известно, что длины его сторон образуют золотую пропорцию.
Входные данные:
Единственное число — диаметр окружности.
Выходные данные:
Два числа — длины сторон прямоугольника.
Тесты.
№ | Входные данные | Выходные данные | |
[latex]d[/latex] | [latex]a[/latex] | [latex]b[/latex] | |
1 | 0 | 0 | 0 |
2 | 1 | 0.850651 | 0.525731 |
3 | 2 | 1.7013 | 1.05146 |
4 | 21 | 17.8638 | 11.0404 |
5 | 0.32 | 0.272208 | 0.168234 |
6 | 1.7 | 1.44611 | 0.893743 |
7 | 134 | 113.981 | 70.448 |
Код программы на C++.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> #include <cmath> using namespace std; int main() { double a, b, f, d; cin >> d; f = (sqrt(5) + 1) / 2; b = d / sqrt (1 + f * f); a = b * f; cout << a << ' ' << b; return 0; } |
Код программы на Java.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.util.*; import java.math.*; class Main { public static void main (String[] args) { Scanner in = new Scanner(System.in); double f = (Math.sqrt(5)+1)/2; double d = in.nextDouble(); double b = d / Math.sqrt(1 + f * f); double a = b * f; System.out.print(a + " " + b); } } |
Решение.
Прямоугольник будет иметь наибольший размер в случае, когда его вершины лежат на окружности. Тогда, очевидно, диаметр окружности будет диагональю данного прямоугольника. Согласно условию, длины его сторон образуют золотую пропорцию. Это означает, что [latex]\frac { a }{ b } =\phi [/latex], где [latex]a[/latex] — длина большей стороны прямоугольника, [latex]b[/latex] — длина его меньшей стороны, а [latex]\phi=\frac { 1+\sqrt { 5 } }{ 2 } [/latex]. Отсюда [latex]a=b\cdot \phi[/latex]. По теореме Пифагора, [latex]{ a }^{ 2 }+{ b }^{ 2 }={ d }^{ 2 }[/latex]. Путём подстановки из предыдущего выражения и простых алгебраических преобразований получим формулу для вычисления длины меньшей стороны: [latex]b=d\cdot \sqrt { \frac { 1 }{ { \phi }^{ 2 }+1 } } [/latex].
Сначала для удобства находим значение [latex]\phi[/latex], затем — по указанным формулам длины сторон прямоугольника.
Ссылка на код на ideone.com: здесь (C++) и здесь (Java).
Для отправки комментария необходимо войти на сайт.