Задача 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 класса?