Задача: Даны квадратные матрицы A, B и C порядка n. Получить матрицу (A+B)C.
Решение: В первом цикле читаем матрицу A. Во втором цикле читаем матрицу B и сразу прибавляем ее к матрице A, получаем сумму матриц. В третьем цикле умножаем сумму матриц A и B на матрицу 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 34 |
#include <iostream> #include <cstdlib> using namespace std; int main(){ int n; cin >> n; int a[n][n], b[n][n], c[n][n], d[n][n]; for( int i=0 ; i<n ; i++ ){ for( int j=0 ; j<n ; j++ ){ cin >> a[i][j]; } } for( int i=0 ; i<n ; i++ ){ for( int j=0 ; j<n ; j++ ){ cin >> b[i][j]; a[i][j] += b[i][j]; } } for( int i=0 ; i<n ; i++ ){ for( int j=0 ; j<n ; j++ ){ cin >> c[i][j]; } } for( int i=0 ; i<n ; i++ ){ for( int j=0 ; j<n ; j++,d[i][j]=0 ){ for( int k=0 ; k<n ; k++ ){ d[i][j] += a[i][k] * c[k][j]; } cout << d[i][j] << (j+1 == n? '\n' : ' ' ); } } } |
Тесты:
n | A | B | C | Output |
3 | 1 2 3 4 5 6 7 8 9 |
0 1 0 0 0 0 0 0 0 |
1 0 0 0 1 0 0 0 1 |
1 3 3 4 5 6 7 8 9 |
2 | 4 6 12 7 |
3 2 1 1 |
7 3 2 8 |
65 85 107 103 |
3 | 3 4 1 1 2 1 5 6 7 |
1 3 1 2 4 5 6 5 1 |
1 1 0 5 8 1 2 3 2 |
43 66 11 45 69 18 82 123 27 |
Ух, спрятали Вы этот sum=0. Уже ругаться хотел.
Все равно буду — не нужен Вам никакой sum. И при умножении Вы портите элемент a[i][j], что не может не сказаться на результате.
И тесты, конечно, халтурные. В последнем должно быть
43 66 11
45 69 18
82 123 27
Опровергайте…
Извиняюсь, исправил.
Хорошо Вы спрятали d[i][j]=0. Но я по прошлому коду уже знал, где искать.
Зачтено.