Расположить элементы строк, находящихся в главной диагонали, в порядке возрастания

Рейтинг: 0Ответов: 1Опубликовано: 26.11.2014

Дан массив размерности nxn. Элементы строк, находящиеся выше главной диагонали (не включая главную диагональ), расположить в порядке возрастания, а затем переписать их в виде вектора (по строкам) в одномерный массив Y, начиная с левого верхнего угла. (Определить размерность массива Y в зависимости от размерности массива X.)

Ответы

▲ 3Принят

Ну что ж, разобьем задачу на несколько этапов.

1 Этап

Опишем закон, по которому будем искать индексы нужных нам элементов.

Главная диагональ это у нас вот эта:

|x| | | | |
| |x| | | |
| | |x| | |
| | | |x| |
| | | | |x|

Нам нужны все элементы, выше нее:

|x|O|O|O|O|
| |x|O|O|O|
| | |x|O|O|
| | | |x|O|
| | | | |x|

Их индексы описываются таким законом: [i,j], где j > i, а j принадлежит промежутку [0; n) (i и j строка и столбец соответственно, кол-во строк/столбцов).

Пол решения у нас есть, мы знаем и можем находить нужные нам элементы по их индексу.

2 Этап

Отсортируем нужные нам элементы построчно с этими элементами

Воспользуемся классическим академическим методом сортировки, а именно методом пузырька. Суть метода в том, что мы сравниваем текущий элемент массива с последующими и меняем их местами, если текущий элемент больше последующего. Т.е. чем больше элемент, тем дальше он будет находится от начала массива. Алгоритм проще некуда, гуглится легко.

3 Этап

Определим размер выходного массива Он равен сумме всем возможным комбинаций индексов закона описанного в 1 этапе. Т.е. sum(n - i) где n - константа равная кол-ву столбцов, i - переменная, изменяющаяся [1, n). Т.е. для 5 столбцов получится такой вот результат: (5-1) + (5 - 2) + (5 - 3) + (5 - 4) = 10

Т.е. алгоритм ясен и очень даже прост.

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

Задача для 9 класса средней школы решена, вуаля!


Описания программного кода, методов и др. оставляю вам, к тому же все уже здесь есть.

Более расширенный пример