Задача 2. Заполни матрицу
Олимпиада школьников по информатике 7-8(!!!) класс Задача 2. Заполни матрицу Научиться работать с матрицей, значит научиться, не только искать элементы, но и заполнять матрицу элементами Дано число n. Создайте матрицу A[2*n+1][2*n+1] и заполните ее по спирали, начиная с числа 0 в центральной клетке A[n+1][n+1]. Спираль выходит вверх, далее закручивается против часовой стрелки.
Формат входного файла Программа получает на вход одно число 1<n<255. Формат выходного файла Программа должна вывести полученный массив, отводя на вывод каждого числа ровно 3 символа.
Для 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
В принципе, решил. Но как-то мудрено для 7-8 класса.
int main (int   argc, char *argv[])
{
    int i;
    int j;
    int n=2;
    int size = 2*n+1;
    int (*data)[size] = malloc(sizeof(int[size][size]));
    memset(data, 0, sizeof(int[size][size]));
    int num = 0;
    i = j = n;
    for (int offset=1; offset<=size; offset++)
    {
        int sign = (offset % 2)?-1:1;
        for(int di=1; di<= offset; di++)
        {
            i += sign;
            if(i<0)
                goto exit_;
            data[i][j] = ++num;
        }
        for(int dj=1; dj<= offset; dj++)
        {
            j += sign;
            if(j<0)
                goto exit_;
            data[i][j] = ++num;
        }
    }
exit_:
    ;
    for(i=0;i<size;i++)
    {
        for(j=0;j<size;j++)
            printf("%3i ", data[i][j]);
        printf("\n");
    }
    free(data);
}
Как сделать проще и понятней для школьника 7-8 класса?





