Задача
Центрирование массива. От каждого из заданных чисел [latex]{x}_{1}, {x}_{2}, \ldots, {x}_{m}[/latex] отнять их среднее арифметическое [latex]\overline{x}_{i} = {x}_{i}[/latex] — [latex]{x}_{cp}[/latex], [latex]i = 1, 2[/latex], … , [latex]m[/latex].
[latex]\overline{x}[/latex] = [latex]1/m[/latex];[latex]E[/latex] от [latex]m[/latex] при [latex]i = 1 (x_1)[/latex];
[latex]{x}_{i}[/latex] = [latex]{x}_{i}[/latex] — [latex]\overline{x}[/latex]; [latex]i = 1, 2[/latex], … , [latex]m[/latex]
Результаты разместить на месте исходных данных.
Тесты
Количество элементов в массиве — m | Массив | Результат |
2 | 2
5 |
-1,5
1,5 |
2 | 2
6 |
-2
2 |
7 | 2
6 -3 5 1 0 0 |
0.43
4.43 -4.57 3.43 -0.57 -1.57 -1.57 |
Код
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 26 27 28 29 30 31 |
import java.util.*; import java.lang.*; import java.io.*; import java.util.Scanner; class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); int m = in.nextInt();//количество элементов в массиве double sum = 0; // сумма чисел массива double[] arr = new double[m]; for(int i = 0; i < m; i++) { arr[i] = in.nextDouble(); } for (int i = 0; i < m; i++) { sum += arr[i];//вводим следующее число } for (int i = 0; i < m; i++) { arr[i] = arr[i] - (sum / m);//результат System.out.println(arr[i]); } } } |
Протестированный код можно увидеть тут.
Решение
Объявляем массив типа double размерностью m. Считываем размерность из первой строки ввода, конвертируем из типа string в тип int; затем считываем элементы массива из второй строки ввода (их конвертируем в double — для точности вычислений). В циклах: находим сумму введенных чисел, затем их среднее арифметическое, затем высчитываем новые значения элементов массива, вычитая от каждого из них среднее арифметическое всего массива. Записываем новые значения поэлементно в исходный массив arr[ ]. Выводим arr[ ].