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

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

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

Здравствуйте, уважаемые. Помогите разобрать в чем моя ошибка, пожалуйста. Вот код:
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;
}
Спираль должна выглядеть вот так: (если 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

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

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;
}

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

В этом коде заполняется матрица по спирали, начиная от середины и по диагонали влево. Вот список ключевых моментов:

  1. В первой строке определяется размер матрицы N = 9.
  2. Затем идет проверка на нечетность размера матрицы (если размер нечетный, то алгоритм будет отличаться).
  3. Далее, в зависимости от результата проверки, определяется значение переменной k, которая будет использоваться для заполнения матрицы.
  4. Затем, вне зависимости от размера матрицы, в основной цикл while заполняются все элементы матрицы.
  5. Внутри цикла while происходит заполнение матрицы по спирали, начиная от элемента A[k][k] (середина матрицы) и далее по диагонали влево.
  6. После заполнения матрицы, происходит её вывод на экран с помощью функции printf.
  7. В конце программы возвращается 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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