奇阶魔方阵

对奇阶魔方阵,可用Dole Rob算法生成,其过程为:从1开始,以此插入各自然数,直到N*N为止。选择插入位置原则为:

a.    第一个位置在第一行的正中;

b.    新位置应当处于最近一个插入位置右上方,但如右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如超出右边界则新边界取应选行的最左一个位置;

c.    若最近一个插入元素为N的整数倍,则选下面一行同列的位置为新位置。

实现代码如下:

#include<stdio.h>

#include<stdlib.h>

#define SIZE 100



//魔法阵

void Magic()

{

    int m[SIZE+1][SIZE+1];

    int n;

    int value=1;

    int col,row;

    printf("请输入魔方阵的阶数n,n为奇数且n<=%d;n=",SIZE);

    scanf("%d",&n);



    if(!(n%2)||n<1||n>SIZE)

    {

        printf("输入有误!\n");

        return ;

    }

    row=1;

    col=(n+1)/2;

    while(value<=n*n)

    {

        m[row][col]=value;

        if(value%n)

        {

            row--;

            col++;

            if(row<1) row=n;

            if(col>n) col=1;

        }

        else 

            row++;

        value=value+1;

    }



    for (int i = 1; i < n+1; i++)

    {

        for (int j= 1; j < n+1; j++)

            printf("%5d",m[i][j]);

        printf("\n");

    }

}

实现的很巧妙!

你可能感兴趣的:(魔方)