|
发表于 2021-3-19 14:38:08
|
显示全部楼层
本楼为最佳答案
- #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>
复制代码 |
|