e-olymp 8530. Печать матрицы

Задача

Условие

Задана матрица $n \cdot n$ — назовем ее $[1..n] \cdot [1..n]$ массивом. Для заданных $r$ и $c$ следует вывести $[1..r] \cdot [1..c]$ массив ($r$ строк и $c$ столбцов исходного массива).

Входные данные

Первая строка содержит число $n (1 \leq n \leq 100)$. Следующие строки содержат матрицу $n \cdot n$. Последняя строка содержит два числа $r$ и $c$ $(1 \leq r, c \leq n)$. Все числа в матрице не превышают по модулю $100$.

Выходные данные

Выведите матрицу $r \cdot c$.

Тесты

Входные данные Выходные данные
1 4
1 2 3 4
5 6 7 8
9 1 2 3
4 5 6 7
3 2
1 2
5 6
9 1
2 5
18 25 34 44 -43
54 65 75 85 -32
95 15 25 35 -3
-4 15 -6 37 0
44 43 23 3 -12
4 3
18 25 34
54 65 75
95 15 25
-4 15 -6
3 2
0 -1
23 69
1 1
0
4 3
1 2 3
-4 -5 -6
7 8 9
3 1
1
-4
7

Решение

Для решения данной задачи необходимо ввести в массив все имеющиеся данные и вывести необходимые, соответственно заданным параметрам. Можно использовать как одномерные массивы, так и двухмерные.
В реализации с одномерными вводим все данные в массив $n \cdot n$, а затем выводим, используя вложенные циклы. Цикл проходит от $0$ до $r$ и от $(j \cdot n)$ — первого элемент необходимой строки до $(c + j \cdot n)$ — последнего элемента. В реализации с двумерными массивами заводим все данные в один массив и после выводим необходимые.

Код программы №1

Код программы №2

Ссылки

4 thoughts on “e-olymp 8530. Печать матрицы

  1. Здравствуйте Елизавета, во втором коде вашей программы вы создаёте динамические массивы, но после их работы не освобождаете пространство после них. Исправьте пожалуйста.
    В первом коде вы так же, средствами последней версии компилятора используете динамические массивы.
    В рамках вашей задачи можно было бы использовать статические массивы длиной на максимальное допустимое количество элементов в матрице.
    Также при реализации первого кода я бы посоветовал использовать частное и остаток от деления на заданные размеры, вместо дополнительного массива.

    • Допустим имеем массив Arr размером $n \times n$, тогда для вывода $r \times c$ элементов данного массива воспользуемся:
      for (int i = 0; i < c * r; i++) cout << Arr[n * (i / r) + i % c];

      • Спасибо за комментарий. Исправила. Удалила ненужный дополнительный массив в первом коде, только воспользовалась другой формулой для вывода элементов.

        • Вы не поняли Ивана. Он предлагал решение без вложенных циклов:

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