Заполнить матрицу по спирали, начиная от середины и по диагонали влево - C (СИ)
Формулировка задачи:
Здравствуйте, уважаемые. Помогите разобрать в чем моя ошибка, пожалуйста.
Вот код:
Спираль должна выглядеть вот так:
(если size = 3)
2 3 4
9 1 5
8 7 6
(если 5)
10 11 12 13 14
25 2 3 4 15
24 9 1 5 16
23 8 7 6 17
22 21 20 19 18
int main() { int size; int i,j; int a[100][100]; printf("Size: "); scanf("%d", &size); int mi=size/2; a[mi][mi] = 1; int value = 1; for (i = 1; i <=size; i++) { for (j = mi - i; j < mi + i; j++) a[mi - i][j] = ++value; for (j = mi - i; j < mi + i; j++) a[j][mi + i] = ++value; for (j = mi + i; j <= size - mi-i; j--) a[mi + i][j] = ++value; for (j = mi + i; j <= size - mi-i; j--) a[j][mi - i] = ++value; } for (i=0; i < size; i++) { for (j=0; j < size; j++) { printf("%4.1d", a[i][j]); } printf("\n"); } return 0; }
Решение задачи: «Заполнить матрицу по спирали, начиная от середины и по диагонали влево»
textual
Листинг программы
#include <stdio.h> const int N = 9; int main() { int i, j, n, x = 1, k, A[N][N]; if(N % 2 != 0){ k = N / 2; n = 1; A[k][k] = x; x++; while(k - n >= 0){ i = k - n; for(j = k - n; j <= k + n; j++){ A[i][j] = x; x++; } j--; for(i = k - n + 1; i <= k + n; i++){ A[i][j] = x; x++; } i--; for(j = k + n - 1; j >= k - n; j--){ A[i][j] = x; x++; } j++; for(i = k + n - 1; i >= k - n + 1; i--){ A[i][j] = x; x++; } i++; n++; } } else{ k = N / 2 - 1; n = 0; while(k - n >= 0){ i = k - n; for(j = k - n; j <= k + n + 1;j++){ A[i][j] = x; x++; } j--; for(i = k - n + 1; i <= k + n + 1; i++){ A[i][j] = x; x++; } i--; for(j = k + n; j >= k - n; j--){ A[i][j] = x; x++; } j++; for(i = k + n; i >= k - n + 1; i--){ A[i][j] = x; x++; } i++; n++; } } for(i = 0; i < N; i++){ for(j = 0; j < N; j++) printf("%3d", A[i][j]); printf("\n"); } return 0; }
Объяснение кода листинга программы
В этом коде заполняется матрица по спирали, начиная от середины и по диагонали влево. Вот список ключевых моментов:
- В первой строке определяется размер матрицы N = 9.
- Затем идет проверка на нечетность размера матрицы (если размер нечетный, то алгоритм будет отличаться).
- Далее, в зависимости от результата проверки, определяется значение переменной k, которая будет использоваться для заполнения матрицы.
- Затем, вне зависимости от размера матрицы, в основной цикл while заполняются все элементы матрицы.
- Внутри цикла while происходит заполнение матрицы по спирали, начиная от элемента A[k][k] (середина матрицы) и далее по диагонали влево.
- После заполнения матрицы, происходит её вывод на экран с помощью функции printf.
- В конце программы возвращается 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д