奇階魔方陣

對奇階魔方陣,可用Dole Rob算法生成,其過程爲:從1開始,以此插入各天然數,直到N*N爲止。選擇插入位置原則爲:

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

b.    新位置應當處於最近一個插入位置右上方,但如右上方位置已超出方陣上邊界,則新位置取應選列的最下一個位置;如超出右邊界則新邊界取應選行的最左一個位置;

c.    若最近一個插入元素爲N的整數倍,則選下面一行同列的位置爲新位置。算法

實現代碼以下:spa

#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");
    }
}

實現的很巧妙!code

相關文章
相關標籤/搜索