Задача: Дана матрица [latex]A [/latex] размера [latex]m\times m [/latex]. Получить матрицу [latex]AA^{*} [/latex] (ее размер [latex]m\times m [/latex]).
Входные данные:
4 |
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 0 | 1 | 2 |
3 | 4 | 5 | 6 |
Выходные данные:
30 | 70 | 20 | 50 |
70 | 174 | 68 | 122 |
20 | 68 | 86 | 44 |
50 | 122 | 44 | 86 |
Решение:
Ссылка на ideone С++: http://ideone.com/iXjoLZ
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 |
#include <iostream> using namespace std; int main() { int n; cin>>n; double x[n][n],y[n][n],z[n][n],mu=0; for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ cin>>x[i][j]; y[j][i]=x[i][j]; } } for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ for (int p = 0; p < n; p++){ mu += x[i][p]*y[p][j]; } z[i][j] = mu; mu = 0; } } for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ cout<<z[i][j]<<" "; } cout<<endl; } } |
Ссылка на ideone Java: http://ideone.com/u96MDY
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 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); double mu=0; int n=in.nextInt(); double[][] x = new double[n][n]; double[][] y = new double[n][n]; double[][] z = new double[n][n]; for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ x[i][j]=in.nextDouble();; y[j][i]=x[i][j]; } } for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ for (int p = 0; p < n; p++){ mu += x[i][p]*y[p][j]; } z[i][j] = mu; mu = 0; } } for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ System.out.printf("%.1f ",z[i][j]); } System.out.println(); } } } |
Вводим матрицу [latex]A[i][j] [/latex] и матрицу [latex]B[j][i] [/latex] в цикле по [latex] i,j[/latex] от одного до [latex] n[/latex]. Умножаем матрицу [latex] A[/latex] на [latex]A^{*} [/latex].
Зачтено с замечаниями.
— Отдельное вычисление и запоминание транспонированной матрицы излишне. Достаточно поменять местами индексы во втором сомножителе при вычислении произведения.
— Вы присваиваете начальное значение переменной mu по-разному для первого раза и для всех остальных. Зачем? Разве не проще обнулить её перед циклом по переменной p?
— Переменная mu излишня.
А зачем я писал год назад замечания? Учтите их пожалуйста.
И не забудьте на этот раз написать пояснения, что именно делается и что обозначается через А*. Поскольку обозначения в коде и условии не совпадают, всё кроме n нужно пояснить.