#include <iostream> using namespace std; int main() { int n; int m; cout << "Введите размерность вашей метрицы: " << endl; cin >> n; cin >> m; int* arr = new int[n * m]; // создание развертки матрицы в виде одномерного массива cout << "Введите элементы вашей матрицы: " << endl; for (int i = 0; i < n * m; ++i) { // хаполняем элементы массива cin >> arr[i]; } for (int i = 0; i < n * m; i++) { // cортировка массива пузырьковым методом for (int j = 0; j < n * m - 1; j++) { if (arr[j] > arr[j + 1]) { arr[j] += arr[j + 1]; arr[j + 1] = arr[j] - arr[j + 1]; arr[j] = arr[j] - arr[j + 1]; } } } int matrix[20][20]; // создание обычной матрицы которую мы будем заполнять элементами из отсортированного массива bool b_matrix[20][20]; // создание bool матрицы for (int i = 0; i < 20; ++i) { // заполняем bool матрицу значениями false for (int j = 0; j < 20; ++j) { b_matrix[i][j] = false; } } int speed_x = 1; //перемещение по строчке int speed_y = 0; // перемещение по столбцу int x = 0, y = 0; // координаты элемента int turn_counter = 0; for (int i = 0; i < n * m; ++i) { //проходимся по созданному массиву и заполняем его элементами из нашего одномерного массива matrix[x][y] = arr[i]; b_matrix[x][y] = true; if (b_matrix[x + speed_x][y + speed_y] or (0 > speed_x + x or speed_x + x > n - 1) or (0 > speed_y + y or speed_y + y > m - 1)) { // перемещаемся по ячейкам матрицы при этом проверяем условия turn_counter += 1; // если мы выходим за строку или столбец: меняем направление движения switch (turn_counter % 4) // если у нас при сопоставлении с bool матрицей на элемент true, то мы не { // заполняем этот элемент и меняем направление движиения case 1: // функция switch case указывает как нужно двигаться чтобы заполнять матрицу { speed_x = 0; speed_y = 1; break; } case 2: { speed_x = -1; speed_y = 0; break; } case 3: { speed_x = 0; speed_y = -1; break; } case 0: { speed_x = 1; speed_y = 0; break; } default: break; } } x += speed_x; //перемещаемся к следующему элементу y += speed_y; } for (int i = 0; i < n; ++i) { // вывод матрицы for (int j = 0; j < m; ++j) { cout << matrix[j][i] << " "; } cout << endl; } return 0; }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter