#include <stdio.h>
#include <stdlib.h>
void mf(int n)
{
int a , b , i , j , k , ** p ;
if(n > 2 && n % 2) {
p = (int **) malloc(sizeof(int *) * n) ;
for(i = 0 ; i < n ; i ++) p[i] = (int *) malloc(sizeof(int) * n) ;
for(i = 0 ; i < n ; i ++) {
for(j = 0 ; j < n ; j ++) {
p[i][j] = 0 ;
}
}
for(a = i = 0 , b = n / 2 ; i < n * n ; i ++) {
p[a][b] = i + 1 ;
if(! a && b == n - 1) {
a ++ ;
} else {
if(! a) a = n - 1 ;
else a -- ;
if(b == n - 1) b = 0 ;
else b ++ ;
if(p[a][b]) {
a += 2 ;
b -- ;
}
}
}
printf("n = %d\n" , n) ;
for(i = 0 ; i < n ; i ++) {
printf("%5d" , p[i][0]) ;
for(j = 1 ; j < n ; j ++) printf(" %5d" , p[i][j]) ;
printf("\n") ;
}
printf("\n") ;
for(i = 0 ; i < n ; i ++) free(p[i]) ;
free(p) ;
}
}
int main(void)
{
int i ;
for(i = 3 ; i < 10 ; i += 2) mf(i) ;
}
编译、运行实况D:\0002.Exercise\C>g++ -o mfx mfx.c
D:\0002.Exercise\C>mfx
n = 3
8 1 6
3 5 7
4 9 2
n = 5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
n = 7
30 39 48 1 10 19 28
38 47 7 9 18 27 29
46 6 8 17 26 35 37
5 14 16 25 34 36 45
13 15 24 33 42 44 4
21 23 32 41 43 3 12
22 31 40 49 2 11 20
n = 9
47 58 69 80 1 12 23 34 45
57 68 79 9 11 22 33 44 46
67 78 8 10 21 32 43 54 56
77 7 18 20 31 42 53 55 66
6 17 19 30 41 52 63 65 76
16 27 29 40 51 62 64 75 5
26 28 39 50 61 72 74 4 15
36 38 49 60 71 73 3 14 25
37 48 59 70 81 2 13 24 35
D:\0002.Exercise\C>
|