• Source
    1. #include<bits/stdc++.h>
    2. #define MAX 17
    3.  
    4. using namespace std;
    5.  
    6. int magic_square[MAX][MAX];
    7.  
    8. int main()
    9. {
    10. int n,i,j,sum,num,row,col,new_line=0;
    11.  
    12. while(scanf("%d",&n)!=EOF)
    13. {
    14. sum = n*(((n*n)+1)/2);
    15.  
    16. if(new_line)
    17. {
    18. puts("");
    19. }
    20.  
    21. new_line = 1;
    22.  
    23. printf("n=%d, sum=%d\n",n,sum);
    24.  
    25. num = 1;
    26.  
    27. row = 1;
    28.  
    29. col = n/2+1;
    30.  
    31. memset(magic_square,0,sizeof(magic_square));
    32.  
    33. magic_square[row][col] = num;
    34.  
    35. while(num<(n*n))
    36. {
    37. row = row-1;
    38.  
    39. col = col+1;
    40.  
    41. if(row<1)
    42. {
    43. row = n;
    44. }
    45.  
    46. if(col>n)
    47. {
    48. col = 1;
    49. }
    50.  
    51. if(magic_square[row][col]==0)
    52. {
    53. magic_square[row][col] = ++num;
    54. }
    55. else
    56. {
    57. row = row+1;
    58.  
    59. col = col-1;
    60.  
    61. if(row>n)
    62. {
    63. row = 1;
    64. }
    65.  
    66. if(col<1)
    67. {
    68. col = n;
    69. }
    70.  
    71. row = row+1;
    72.  
    73. if(row>n)
    74. {
    75. row = 1;
    76. }
    77.  
    78. if(magic_square[row][col]==0)
    79. {
    80. magic_square[row][col] = ++num;
    81. }
    82. }
    83. }
    84.  
    85. for(i=1;i<=n;i++)
    86. {
    87. for(j=1;j<=n;j++)
    88. {
    89. if(n<=3)
    90. {
    91. printf(" %d",magic_square[i][j]);
    92. }
    93. else if(n<=9)
    94. {
    95. printf(" %2d",magic_square[i][j]);
    96. }
    97. else
    98. {
    99. printf(" %3d",magic_square[i][j]);
    100. }
    101. }
    102.  
    103. puts("");
    104. }
    105. }
    106.  
    107. return 0;
    108. }