Задача
Комплексная матрица [latex]Z[/latex] представляется парой [latex]X[/latex], [latex]Y[/latex] действительных матриц так, что [latex]Z=X+iY[/latex]. Даны действительные квадратные матрицы [latex]A[/latex], [latex]B[/latex], [latex]C[/latex] и [latex]D[/latex] порядка [latex]m[/latex]. Найти произведение двух комплексных матриц [latex]A+iB[/latex] и [latex]C+iD[/latex], т. е. найти действительные квадратные матрицы [latex]X[/latex] и [latex]Y[/latex] порядка [latex]m[/latex] такие, что [latex]X+iY=(A+iB)(C+iD)[/latex].
Пример
Входные данные | Вывод |
3
9 5 4 8 5 2 6 1 3 1 4 6 5 3 1 9 8 7 4 2 8 3 9 5 1 2 7 5 6 7 4 1 9 3 8 2 |
X:
16 13 70 9 24 39 -68 -91 -75
Y: 99 141 186 96 108 167 110 165 218
|
Решение
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
#include <iostream> using namespace std; int main() { int m; cin>>m; int A[m][m], B[m][m], C[m][m], D[m][m]; int X[m][m], Y[m][m]; int el; for(int i=0;i<m;i++) for(int j=0;j<m;j++) cin>>A[i][j]; for(int i=0;i<m;i++) for(int j=0;j<m;j++) cin>>B[i][j]; for(int i=0;i<m;i++) for(int j=0;j<m;j++) cin>>C[i][j]; for(int i=0;i<m;i++) for(int j=0;j<m;j++) cin>>D[i][j]; for(int i=0;i<m;i++) { for(int j=0;j<m;j++) { el=0; for(int l=0;l<m;l++) { el=el+A[i][l]*C[l][j]-B[i][l]*D[l][j]; } X[i][j]=el; } } for(int i=0;i<m;i++) { for(int j=0;j<m;j++) { el=0; for(int l=0;l<m;l++) { el=el+A[i][l]*D[l][j]+B[i][l]*C[l][j]; } Y[i][j]=el; } } cout<<"X:"<<endl; for(int i=0;i<m;i++) { for(int j=0;j<m;j++) { cout<<X[i][j]<<" "; } cout<<endl; } cout<<endl; cout<<"Y:"<<endl; for(int i=0;i<m;i++) { for(int j=0;j<m;j++) { cout<<Y[i][j]<<" "; } cout<<endl; } return 0; } |
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) { Scanner in = new Scanner(System.in); int m = in.nextInt(), el; int[][] A = new int[m][m], B = new int[m][m], C = new int[m][m], D = new int[m][m],X = new int[m][m], Y = new int[m][m]; for(int i = 0; i < m; i++) for(int j = 0; j < m; j++) A[i][j] = in.nextInt(); for(int i = 0; i < m; i++) for(int j = 0; j < m; j++) B[i][j] = in.nextInt(); for(int i = 0; i < m; i++) for(int j = 0; j < m; j++) C[i][j] = in.nextInt(); for(int i = 0; i < m; i++) for(int j = 0; j < m;j++) D[i][j] = in.nextInt(); for(int i = 0; i < m; i++) { for(int j = 0; j < m; j++) { el = 0; for(int l = 0;l < m; l++) { el += A[i][l] * C[l][j] - B[i][l] * D[l][j]; } X[i][j] = el; } } for(int i = 0; i < m; i++) { for(int j = 0; j < m; j++) { el = 0; for(int l = 0; l < m; l++) { el += A[i][l] * D[l][j] + B[i][l] * C[l][j]; } Y[i][j] = el; } } System.out.println("X:"); for(int i = 0; i < m; i++) { for(int j = 0; j < m; j++) { System.out.printf(X[i][j] + " "); } System.out.println(); } System.out.println(); System.out.println("Y:"); for(int i = 0; i < m; i++) { for(int j = 0; j < m; j++) { System.out.printf(Y[i][j] + " "); } System.out.println(); } } } |
[latex]X+iY=(A+iB)(C+iD)=(AC-BD)+i(AD+BC)[/latex], т. е. [latex]X=AC-BD[/latex], [latex]Y=AD+BC[/latex].
Зачтено с оговоркой…
Мы вообще учили функции?
Прошёл год, а Вы ещё не готовы написать собственную функцию? Не верю.
Пожалуйста вынесите повторяющиеся действия в отдельные функции.