奇阶魔方阵

对奇阶魔方阵,可用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");
    }
}

实现的很巧妙!

posted on 2013-09-24 16:30  lufangtao  阅读(783)  评论(0编辑  收藏  举报

导航