Існує маса різних способів пояснення множення матриць. Я буду дотримуватися однієї фігури, оскільки я вважаю, що більшість людей тут знайомі (і ця цифра дуже описова). Якщо ви хочете отримати більш детальну інформацію, пропоную вам відвідати статтю у Вікіпедії або пояснення у WolframMathWorld .
Просте пояснення:
Припустимо, у вас є дві матриці - A і B , де A 3 на 2, а B - 2 на 3. Якщо ви виконаєте множення матриць на цих матрицях, або AB , або BA, ви отримаєте результати нижче:
Виклик:
Реалізуйте символьне множення матриць у вашій мові. Ви повинні взяти дві матриці в якості вхідних даних, де кожен елемент в матрицях представлений символом ASCII, що не пробілює (кодові точки 33-126). Ви повинні вивести добуток цих матриць.
Правила щодо результатів:
Продукт з двох записів не повинен мати символів між ними. Це ab
, чи не a*b
, a·b
, times(a,b)
або що - щось подібне. Це aa
, ні a^2
.
Сума термінів повинна мати пробіл (ASCII код, точка 32) між ними. Це a b
, ні a+b
, plus(a,b)
чи щось подібне.
Обґрунтування цих двох правил: Всі символи, що не мають пробілу, дозволені як символи в матрицях, тому використання їх як математичних символів було б безладним. Отже, те, що ти можеш нормально написати, як a*b+c*d
буде ab cd
.
Ви можете вибрати порядок виконання умов. ab cd
, dc ab
і cd ba
математично говорять однаково, тож ви можете вибрати порядок і тут. Порядок не повинен бути послідовним, доки він математично правильний.
Правила щодо форматування матриці:
Матриця може бути введена в будь-якому форматі, який ви хочете, за винятком однієї рядка без обмежувачів між рядками (це тому, що вихід буде повністю зіпсований). Обидві матриці повинні бути введені в одному форматі. Усі наведені нижче приклади є дійсними способами введення та виведення матриці.
"ab;cd" <- This will look awful, but it's still accepted.
"a,b\nc,d"
[[a,b],[c,d]]
[a, b]
[c, d]
Я знаю, що це дозволяє безліч форматів, які будуть виглядати безладно, але завдання полягає у множенні матриць, а не в форматуванні виводу.
Загальні правила:
- Ви можете припустити дійсний ввід. Матричне множення завжди буде можливим із заданими розмірами.
- Буде лише дві матриці.
- Ви можете припустити, що матриці не порожні
- Вбудовані функції приймаються (але, ймовірно, трохи громіздкими через вимоги до форматування).
- Ви, звичайно, можете використовувати знаки втечі, якщо це необхідно (
\'
замість'
). - Будь-який стандартний метод введення та виведення в порядку .
Тестові приклади:
Дві вхідні матриці показані порожнім рядком між ними. Вихід відображається після Output:
. Коли є дві матриці виводу, тоді просто показати інші результати, які будуть прийняті.
Тест №1
Inputs:
[a]
[b]
Output:
[ab]
[ba] <- Also OK
Тест №2
Inputs:
[a, b]
[1, 4]
[y, {]
[%, 4, 1]
[a, b, c]
Output:
[a% ba, a4 bb, a1 bc]
[1% 4a, 14 4b, 11 4c]
[y% {a, y4 {b, y1 {c]
Тест №3:
Inputs:
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 1, 2, 3]
[4, 5, 6, 7]
[a]
[b]
[c]
[d]
Output:
[1a 2b 3c 4d]
[5a 6b 7c 8d]
[9a 1b 2c 3d]
[4a 5b 6c 7d]
[d4 c3 b2 a1] <-- Also OK
[d8 c7 b6 a5]
[1b 9a c2 3d]
[a4 b5 d7 6c]
Якщо ваша відповідь на правила, що вимагають ab cd
замість цього, a*b+c*d
є: вам слід уникати громіздких форматів вводу / виводу , то я хотів би зазначити, що формати введення та виведення дуже гнучкі. Те, що ви не можете використовувати, *
а також +
для продуктів і сум, може ускладнити використання простої вбудованої, але я не вважаю це негативним.