А705

Задача:
Даны квадратные матрицы [latex]A[/latex] и [latex]B[/latex] порядка [latex]n[/latex]. Получить матрицу [latex]A(B-E)+C[/latex], где [latex]E[/latex] — единичная матрица порядка [latex]n[/latex], а элементы матрицы [latex]C[/latex] вычисляются по формуле:[latex]C_{ij}=\frac{1}{i+j}\;\;\;\;(i,j=1,2,\ldots,n)[/latex].

Тесты
К сожалению я не разместила здесь тесты к задаче.

Решение
Реализуем хранение матрицы в виде двумерного массива. Операции сложения и вычитания матриц выполняются поэлементно. Умножение требует наличия у левого сомножителя такого же числа столбцов, как и число строк у правого сомножителя. Поэлементно умножаем каждую строку первой матрицы на каждый столбец второй накапливая сумму значений в элементах результирующей матрицы.

Код C++

Код C++ на Ideone: A705

Код Java

Код Java на Ideone: A705

Тесты:

№ теста Размерность матрицы n Матрица A Матрица В Ответ
1 2 3 4
2 1
2 1
9 0
  39.50  -0.67

11.33  1.25

2 4 5 5 5 5
0 0 8 7
2 3 4 7
8 6 1 2
5 7 3 4
9 8 3 4
2 3 4 5
6 6 6 6
  105.50  115.33  75.25  90.20

58.33  66.25  66.20  75.17

85.25  89.20  69.17  75.14

100.20  113.17  57.14  71.12

3 3 0 0 0

0 0 0

0 0 0

1 0 0

0 1 0

0 0 1

 0.5 0.33 0.25

0.33 0.25 0.20

0.25 0.20 0.17

 

Кібакова Надія Олександрівна
Кібакова Надія Олександрівна

Latest posts by Кібакова Надія Олександрівна (see all)

2 thoughts on “А705

  1. Запись вида
    C[i][j] = 0;
    C[i][j] = 1.0/(i+1 + j+1);
    не имеет смысла. Первая команда делает бесполезную работу.

    Кроме того, я бы рекомендовал использовать double вместо float везде, если Вы не программируете OpenGL. На всяких АСМных сайтах так уж точно.

    По-хорошему, как на олимпиаде, так и (в особенности!) в промышленном программировании здесь стоило реализовать класс Матрица и определить операторы над ним. Это довольно простой пример, но уже в нем Вы дважды скопировали чтение. В более сложном примере могли бы многократно повторяться сложение, вычитание, умножение. Куда проще один раз отладить их в виде отдельных методов, чем каждый раз вставлять огромные куски кода, потенциально содержащие ошибку.

Добавить комментарий