Задача: Найти среднее арифметическое элементов каждой строки матрицы [latex]Q\left(l,m \right)[/latex] и вычесть его из элементов этой строки.
[latex]l[/latex] | [latex]m[/latex] | [latex]Q\left(l,m \right)[/latex] | [latex]\acute{Q}\left(l,m \right)[/latex] | ||||||||||||||||||||||||
2 | 3 |
|
|
||||||||||||||||||||||||
4 | 3 |
|
|
||||||||||||||||||||||||
1 | 1 | 8 | 0 |
C++:
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 32 33 |
#include <iostream> using namespace std; int main() { int l, m; cin >> l >> m;//Количество строк и столбцов. double q[l][m];//Данная матрица. double sum[l], sr[l]; for (int i=0; i<l; i++) { sum[i]=0; } for (int i=0; i<l; i++) { for (int j=0; j<m; j++) { cin >> q[i][j];//Ввод элементов матрицы. sum[i]+=q[i][j];//Сумма элементов каждой строки. } sr[i]=sum[i]/m;//Среднее арифметическое каждой строки. } for (int i=0; i<l; i++) { for (int j=0; j<m; j++) { q[i][j]-=sr[i];//Вычитание среднего арифметического из каждого элемента матрицы. cout << q[i][j] << " ";//Вывод итоговой матрицы. } cout << endl; } return 0; } |
Java:
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 32 33 34 35 36 37 38 39 40 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) { Scanner in = new Scanner(System.in); int l = in.nextInt(); int m = in.nextInt();//Количество строк и столбцов. double q[][] = new double [l][m];//Данная матрица. /*for(int i=0; i<l; i++){ for(int j=0; j<m; j++){ System.out.print(q[i][j]+" "); } System.out.println(""); }*/ double sum[] = new double [l]; double sr[] = new double [l]; for (int i=0; i<l; i++){ sum[i]=0; } for (int i=0; i<l; i++) { for (int j=0; j<m; j++){ q[i][j] = in.nextDouble();//Ввод элементов матрицы. sum[i]+=q[i][j];//Сумма элементов каждой строки. } sr[i]=sum[i]/m;//Среднее арифметическое каждой строки. } for (int i=0; i<l; i++){ for (int j=0; j<m; j++){ q[i][j]-=sr[i];//Вычитание среднего арифметического из каждого элемента матрицы. System.out.print(q[i][j]+" ");//Вывод итоговой матрицы. } System.out.println(""); } } } |
У переменных [latex]l[/latex], [latex]m[/latex] (количество строк и столбцов соответственно) — тип int, т.к. это целые числа.
Массив для данной матрицы [latex]q\left[l \right]\left[m \right][/latex] и массивы элементов суммы [latex]sum\left[l \right][/latex] и среднего арифметического [latex]sr\left[l \right][/latex] каждой строки имеют тип double, так как могут содержать вещественные числа.
В первом цикле инициализируем элементы массива [latex]sum\left[l \right][/latex] нулями, чтобы там не лежал мусор.
Во втором цикле, который перебирает все элементы матрицы, вводятся эти элементы, считается их сумма и среднее арифметическое для каждой строки.
В третьем цикле вычитаем из каждого элемента среднее арифметическое строки, в которой он находится, и выводим новое значение элемента на экран.
В общем, все верно, кроме того, что Вы не инициализировали массив sum[l] и там может лежать мусор. К сожалению для Variable length arrays (VLA), которые вы используете нельзя написать double sum[l]={0}; Поэтому нужно задавать начальные значения элементов массива сумм (нули) присваиванием -логично это сделать непосредственно перед циклом, вычисляющим сумму.
Исправила.
Засчитано, 10 баллов.
Инициализация сделана правильно, единственное, проще и короче это сделать так: