Заполнить массив по спирали начиная с середины - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет, уже месяц мучаюсь над одной задачей Условие:

Дано число n. Создайте массив A[2*n+1][2*n+1] и заполните его по спирали, начиная с числа 0 в центральной клетке A[n+1][n+1]. Спираль выходит вверх, далее закручивается против часовой стрелки.

При n=2 должен выводить 12 11 10 9 24 13 2 1 8 23 14 3 0 7 22 15 4 5 6 21 16 17 18 19 20 Ребят пожалуйста помогите)

Решение задачи: «Заполнить массив по спирали начиная с середины»

textual
Листинг программы
#include <stdio.h>
 
int main() {
    int n;
    printf("n? ");
    scanf("%d", &n);
    int s = 2 * n;
    int a[s + 1][s + 1];
    int c = (s + 1) * (s + 1) - 1;
    a[n][n] = 0;
    for (int k = 0; k <= n; ++k) {
        for (int i = k; i < s - k; ++i) a[i][s - k] = c--;
        for (int i = k; i < s - k; ++i) a[s - k][s - i] = c--;
        for (int i = k; i < s - k; ++i) a[s - i][k] = c--;
        for (int i = k; i < s - k; ++i) a[k][i] = c--;
    }
    for (int i = 0; i <= s; ++i) {
        for (int j = 0; j <= s; ++j) printf("%4d", a[i][j]);
        puts("");
    }
}

Объяснение кода листинга программы

В этом коде:

  1. Спрашивается у пользователя размерность массива n.
  2. Создаётся массив a размером (2n+1)x(2n+1).
  3. Задаются начальные значения для заполнения массива.
  4. Выполняется цикл, который заполняет массив по спирали, начиная с центра.
  5. Выводится на экран заполненный массив.

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы