Задача
Для графического изображения соотношения между различного рода величинами во многих областях человеческой деятельности используются различные графики и диаграммы. Одним из типов диаграмм является так называемая круговая диаграмма.
Исходными данными для этой диаграммы является набор чисел $a_1,\ldots, a_n, а$ диаграмма представляет собой круг радиуса $r$, разделенный на секторы. При этом каждому из чисел соответствует ровно один сектор, площадь которого пропорциональна этому числу. Общая площадь секторов равна площади круга.
Ваша задача состоит в том, чтобы по набору чисел и по радиусу круга определить площадь каждого из секторов круговой диаграммы.
Входные данные
Первая строка содержит два целых числа $n$ и $r \space (1 \leq n, r \leq 100)$. Вторая строка содержит $n$ целых чисел $a_1,\ldots, a_n \space (1 \leq a_i \leq 100 \space \forall \space i = \overline{1, n})$.
Выходные данные
Выведите $n$ вещественных чисел — площади секторов, соответствующих числам $a_1,\ldots, a_n$. Выводите каждое из чисел в отдельной строке.
Все эти числа должны быть выведены с точностью не хуже $10^{-6}$.
Тесты
Входные данные | Выходные данные |
3 2 1 4 3 |
1.570796327 6.283185307 4.712388980 |
2 3 3 8 |
7.711181968 20.563151914 |
4 5 2 5 9 1 |
9.239978393 23.099945982 41.579902768 4.619989196 |
5 9 4 16 8 20 11 |
17.252135928 69.008543713 34.504271856 86.260679641 47.443373803 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); PrintWriter out = new PrintWriter(System.out); int n = in.nextInt(); int r = in.nextInt(); int sum = 0; double S; int[] x = new int[n]; for (int i = 0; i < n; i++) x[i] = in.nextInt(); for (int i = 0; i < n; i++) sum += x[i]; S = Math.PI * r * r; for (int i = 0; i < n; i++) out.format("%.9f%n", (S / sum) * x[i]); out.flush(); } } |
Решение
Найдем сперва сумму всех чисел $a_i$ и площадь диаграммы (по известной формуле площади круга). Теперь можем легко посчитать площади каждого из секторов нашей диаграммы, разделив площадь последней на ранее найденную сумму и умножив их частное на соответствующее число $a_i$.
Ссылки
Условие задачи на e-olymp
Код решения на Ideone
Решение этой же задачи на C++