Задача взята отсюда.
Условие
Даны квадратные матрицы с целыми числами $A$, $B$ и $C$ порядка $n$. Получить матрицу $(A+B)*C$.
Входные данные
В первой строке — размерность матриц $n$. Далее вводятся построчно матрицы $A$, $B$ и $C$.
Выходные данные
Вывести построчно результирующую матрицу $(A+B)*C$.
Тесты:
Тесты:
$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$ |
Код на Haxe:
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 69 70 71 72 73 74 75 |
package; import cpp.Lib; import haxe.io.Input; class Main { static function main() { var input:Input = Sys.stdin(); var n:Int = Std.parseInt(input.readLine()); var ab = new Array<Array<Int>>(); var c = new Array<Array<Int>>(); var d = new Array<Array<Int>>(); var i:Int = 0, j:Int = 0, k:Int = 0; var input_str:String; var space_loc:Int; var arr_temp:Array<Int>; for (i in 0...n) { arr_temp = new Array<Int>(); input_str = input.readLine(); for (j in 0...n) { space_loc = input_str.indexOf(" "); if (space_loc == 0) { space_loc = input_str.length; } arr_temp.push(Std.parseInt(input_str)); if (space_loc != input_str.length) { input_str = input_str.substr(space_loc + 1, input_str.length - space_loc); } } ab.push(arr_temp); } for (i in 0...n) { input_str = input.readLine(); for (j in 0...n) { space_loc = input_str.indexOf(" "); if (space_loc == 0) { space_loc = input_str.length; } ab[i][j] += (Std.parseInt(input_str)); if (space_loc != input_str.length) { input_str = input_str.substr(space_loc + 1, input_str.length - space_loc); } } } for (i in 0...n) { arr_temp = new Array<Int>(); input_str = input.readLine(); for (j in 0...n) { space_loc = input_str.indexOf(" "); if (space_loc == 0) { space_loc = input_str.length; } arr_temp.push(Std.parseInt(input_str)); if (space_loc != input_str.length) { input_str = input_str.substr(space_loc + 1, input_str.length - space_loc); } } c.push(arr_temp); } for (i in 0...n) { arr_temp = new Array<Int>(); for (j in 0...n) { arr_temp[j] = 0; for (k in 0...n) { arr_temp[j] += ab[i][k] * c[k][j]; } Sys.stdout().writeString(arr_temp[j] + " "); } d.push(arr_temp); Sys.stdout().writeString("\n"); } } } |
Ход решения:
В первом цикле читаем матрицу $A$:
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
for (i in 0...n) { arr_temp = new Array<Int>(); input_str = input.readLine(); for (j in 0...n) { space_loc = input_str.indexOf(" "); if (space_loc == 0) { space_loc = input_str.length; } arr_temp.push(Std.parseInt(input_str)); if (space_loc != input_str.length) { input_str = input_str.substr(space_loc + 1, input_str.length - space_loc); } } ab.push(arr_temp); } |
Во втором цикле считываем элементы матрицы $B$ и сразу прибавляем их к соответствующим элементам матрицы $A$:
34 35 36 37 38 39 40 41 42 43 44 45 46 |
for (i in 0...n) { input_str = input.readLine(); for (j in 0...n) { space_loc = input_str.indexOf(" "); if (space_loc == 0) { space_loc = input_str.length; } ab[i][j] += (Std.parseInt(input_str)); if (space_loc != input_str.length) { input_str = input_str.substr(space_loc + 1, input_str.length - space_loc); } } } |
В третьем цикле читаем матрицу $C$:
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
for (i in 0...n) { arr_temp = new Array<Int>(); input_str = input.readLine(); for (j in 0...n) { space_loc = input_str.indexOf(" "); if (space_loc == 0) { space_loc = input_str.length; } arr_temp.push(Std.parseInt(input_str)); if (space_loc != input_str.length) { input_str = input_str.substr(space_loc + 1, input_str.length - space_loc); } } c.push(arr_temp); } |
Наконец, в четвертом цикле вычисляем и выводим элементы результирующей матрицы $D = (A + B) * C$:
62 63 64 65 66 67 68 69 70 71 72 73 |
for (i in 0...n) { arr_temp = new Array<Int>(); for (j in 0...n) { arr_temp[j] = 0; for (k in 0...n) { arr_temp[j] += ab[i][k] * c[k][j]; } Sys.stdout().writeString(arr_temp[j] + " "); } d.push(arr_temp); Sys.stdout().writeString("\n"); } |
Ссылки:
Рабочий код для тестирования на try.haxe.org: Try Haxe !