C语言——打印魔方阵(每一行,每一列,对角线之和相等)

《一》魔方阵说明:

        魔方阵是一个N*N的矩阵;

        该矩阵每一行,每一列,对角线之和都相等;

《二》魔方阵示例:

        三阶魔方阵:

                8   1   6

                3   5   7

                4   9   2

        每一行之和:8+1+6=15;

                         3+5+7=15;

                         4+9+2=15;

        每一列之和:8+3+4=15;

                         1+5+9=15;

                         6+7+2=15;

        对角线之和:8+5+2=15;

                         6+5+4=15;

《三》魔方阵计算规律(行,列以1开始):

       1.将“1”放在第一行,中间一列;

       2.从2开始至N*N各数按如下规律:

              每一个数存放的行比上一个数的行减1;

              每一个数存放的列比上一个数的列加1;

       3.当一个数行为1,下一个数行为N;

       4.当一个数列数为N,下一个数列数为1,行数减1;

       5.若按上述规则确定的位置有数字,或上一个数位第1行第N列,

          下一个数字位置为上一个数的正下方(即行数减1,列数不变);

《四》源代码:

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <math.h>
 5 
 6 #define N 5
 7 
 8 int main()
 9 {
10     int a[N][N] = {0};
11     int count = 1;
12     int row = 0, cul = N / 2;
13     while (count <= N*N)
14     {
15         a[row][cul] = count;
16         int i = row;
17         int j = cul;
18         if (i == 0)
19         {
20             i = N - 1;
21         }
22         else
23         {
24             i = i - 1;
25         }
26         j = (j + 1) % N;
27         if (a[i][j]!=0||(row==0&&cul==N-1))
28         {
29             i = row + 1;
30             j = cul;
31         }
32         row = i;
33         cul = j;
34         count++;
35     }
36 
37     for (int i = 0; i < N; i++)
38     {
39         for (int j = 0; j < N; j++)
40         {
41             printf("%3d",a[i][j]);
42         }
43         printf("
");
44     }
45 
46     system("pause");
47 }
View Code

         

原文地址:https://www.cnblogs.com/weiyikang/p/5045251.html