1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| #include <stdio.h>
#include <stdlib.h>
void recursive(int **arr, int order,
int pos, int val);
int main()
{
int **arr, order = 1;
int i, j;
while (printf("\nenter an order or 0 to exit: ") && scanf("%d", &order)
&& order > 0)
{
arr = (int **) malloc(order * sizeof(int *));
for (i = 0; i < order; i++)
arr[i] = (int *) malloc(order * sizeof(int));
recursive(arr, order, 0, order * order);
putchar('\n');
for (i = 0; i < order; i++) {
for (j = 0; j < order; j++)
printf("%3d", arr[i][j]);
putchar('\n');
free(arr[i]);
}
free(arr);
}
return 0;
}
void recursive(int **arr, int ord, int pos, int val)
{
int i, j;
if (pos < ord / 2 + (ord & 1 ? 1 : 0)) {
for (j = pos; j < ord - pos; j++)
arr[pos][j] = val--;
j -= 2;
for (i = pos + 1; i < ord - pos; i++)
arr[i][ord - pos - 1] = val--;
i--;
for ( ; j >= pos; j--)
arr[i][j] = val--;
j++;
for (i--; i >= pos + 1; i--)
arr[i][j] = val--;
recursive(arr, ord, pos + 1, val);
}
} |