Предмет: Информатика, автор: gasanovg2013

ДАЮ 30 баллов!!! ПОЖАЛУЙСТА, помогите на С++, именно на языке С++

ограничение по времени на тест: 1 секунда
ограничение по памяти на тест: 256 мегабайт
ввод: стандартный ввод
вывод: стандартный вывод

Имеется квадратная матрица, состоящая из n строк и n столбцов. Требуется разделить матрицу на 4 квадрата (n - четное число),
n2
и каждый квадрат заполнить числами от 1 до n^2/4
Левый верхний и правый нижний квадраты заполняются горизонтальными меандрами, а правый верхний и левый нижний -
вертикальными меандрами (см. пример).
Входные данные В единственной строке задано целое число n (2 <= n <= 32) - размер матрицы.
Выходные данные
Выведите n строк по n чисел в каждой через пробел - необходимую матрицу.
Пример
входные данные
6
выходные данные
1 2 3 1 6 7
6 5 4 2 5 8
7 8 9 3 4 9
1 6 7 1 2 3
2 5 8 6 5 4
3 4 9 7 8 9

Ответы

Автор ответа: Stephan2
1

#include <iostream>

#include <vector>

using namespace std;

void fillMatrix(vector<vector<int>>& matrix, int start, int end, int value) {

   for (int i = start; i < end; i++) {

       for (int j = start; j < end; j++) {

           matrix[i][j] = value++;

       }

   }

}

void printMatrix(const vector<vector<int>>& matrix) {

   int n = matrix.size();

   for (int i = 0; i < n; i++) {

       for (int j = 0; j < n; j++) {

           cout << matrix[i][j] << ' ';

       }

       cout << endl;

   }

}

int main() {

   int n;

   cin >> n;

   vector<vector<int>> matrix(n, vector<int>(n, 0));

   int quarterSize = n / 2;

   int startValue = 1;

   // Левый верхний квадрат - горизонтальный меандр

   fillMatrix(matrix, 0, quarterSize, startValue);

   // Правый верхний квадрат - вертикальный меандр

   fillMatrix(matrix, 0, quarterSize, startValue + quarterSize * quarterSize);

   fillMatrix(matrix, quarterSize, n, startValue);

   // Правый нижний квадрат - горизонтальный меандр

   fillMatrix(matrix, quarterSize, n, startValue + quarterSize * quarterSize + quarterSize * quarterSize);

   fillMatrix(matrix, 0, quarterSize, startValue + 2 * quarterSize * quarterSize);

   // Левый нижний квадрат - вертикальный меандр

   fillMatrix(matrix, quarterSize, n, startValue + 2 * quarterSize * quarterSize + quarterSize * quarterSize);

   fillMatrix(matrix, quarterSize, n, startValue + 3 * quarterSize * quarterSize);

   printMatrix(matrix);

   return 0;

}

Похожие вопросы