Задача.
Дана матрица $A$ размера $m\times m$. Получить матрицу $AA^{*}$ (ее размер $m\times m$).
Размер матрицы:
m | 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 |
Ход решения:
На входе считываем $m$ — размер матрицы. После этого создаем два вложенных массива — $A$ для хранения вводимых значений и вычислений, $result$ — для результатов вычислений. Переменная $sum$ нужна для хранения временного результата суммы произведений $A[i,k]A[j,k]$.
Код:
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 |
class Main { static function main() { var m = getNextInt(); var A:Array<Array<Int>> = [for (x in 0...m) [for (y in 0...m) 0]]; var result:Array<Array<Int>> = [for (x in 0...m) [for (y in 0...m) 0]]; for (i in 0...m) { for (j in 0...m) { A[i][j] = getNextInt(); } } for (i in 0...m) { for (j in 0...m) { var sum = 0; for (k in 0...m) { sum += A[i][k] * A[j][k]; } result[i][j] = sum; } } var output = Sys.stdout(); for (i in 0...m) { for (j in 0...m) { output.writeString(Std.string(result[i][j]) + " "); } output.writeString("\n"); } } static function getNextInt() { var number = Sys.stdin().readLine(); return Std.parseInt(number); } } |