魔方阵

1.将1放在第一行中间一列
2.从2直到N*N为止,每一个数存放的行比前一个数的行数减1,列数加1。
3.如果上一数的行数为1,则下一数的行数为N。
4.如果上一数的列数为 N,下一个数列数为1,行数减1。
5.如果已经有数,把这一个数放在有数的正下方。(行数加1列数不变)

#include<stdio.h>
#define N 5

int main(void){
    int a[N][N];

   for(int i=0;i<N;i++)
    for(int j=0;j<N;j++)
        a[i][j]=0;

    int i=0;
    int j=N/2;
    a[0][j]=1;//first step:put 1 in the first line and middle

    int m,n;
    for(int k=2;k<=N*N;k++){
            m=i-1;
            n=j+1;

            if(i==0){
                m=N-1;
            }

            if(j==N-1){
                n=0;
            }

            if(a[m][n]){
                m=i+1;
                n=j;
            }

            a[m][n]=k;
                i=m;
                j=n;

        }


   for(int i=0;i<N;i++){
    for(int j=0;j<N;j++)
        printf("%4d ",a[i][j]);

        printf("\n");
   }

}
posted @ 2024-04-28 15:58  zhongta  阅读(20)  评论(0)    收藏  举报