Получить целочисленную квадратную матрицу порядка 7 с элементами 1, 2, ..., расположенными по спирали - C (СИ)
Формулировка задачи:
Получить целочисленную квадратную матрицу порядка 7, элементами которой являются числа 1, 2, ... 49 расположенные в ней по спилали. (Если не трудно, можно с пояснениями)
Решение задачи: «Получить целочисленную квадратную матрицу порядка 7 с элементами 1, 2, ..., расположенными по спирали»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#define SIZE 7
void circle(int matrix[SIZE][SIZE]);
int main(void) {
int i, j;
int matr[SIZE][SIZE];
circle(matr);
for (i = 0; i < SIZE; ++i) {
for (j = 0; j < SIZE; ++j) {
printf("%4d", matr[i][j]);
}
printf("\n");
}
return EXIT_SUCCESS;
}
void circle(int matrix[SIZE][SIZE]) {
int i, j;
static int m_max = SIZE, n_max = SIZE;
static int m_min = 1, n_min = 0;
static int i_save = 0, j_save = 0;
static int value = 0;
for (i = i_save, j = j_save; j < n_max; ++j) {
matrix[i][j] = ++value;
}
j_save = --j;
++i_save;
for (i = i_save, j = j_save; i < m_max; ++i) {
matrix[i][j] = ++value;
}
i_save = --i;
--j_save;
for (i = i_save, j = j_save; j >= n_min; --j) {
matrix[i][j] = ++value;
}
j_save = ++j;
--i_save;
for (i = i_save, j = j_save; i >= m_min; --i) {
matrix[i][j] = ++value;
}
i_save = ++i;
++j_save;
--m_max;
--n_max;
++m_min;
++n_min;
if (value < SIZE * SIZE) {
circle(matrix);
}
}
Объяснение кода листинга программы
Вывод на экран и заполнение матрицы осуществляется по спирали, начиная с левого верхнего угла, с шагом 1, 8, 6, 5, 4, 3, 2, 1, а диагональные элементы (углы) матрицы пропущены. Для определения номера элемента используется формула: номер = (размер матрицы — 1) (размер матрицы — 2) / 2 + (размер матрицы — 1) — i — j (размер матрицы — 1) / 2, где i, j — координаты элемента.