// 奇数魔方阵算法
#include<stdio.h>
#define N 5
int main(void)
{
int a[N+1][N+1]={0};
int i,j,key=1;
i=0;
j=(N+1)/2;
for(key=1;key<=25;key++) // 解法 第一个数字放在第一行第一列的正中央,然后向右(上)填,如果右上已有数字,则向下填...
{ if((key%N)==1) // 可判断 右上位置是否已经填上数字
i++;
else
{
i--;
j++;
}
if(i==0) // 如果是边界 则到第N行
i=N;
if(j>N) //如果是边界则到第1列
j=1;
a[i][j]=key;
}
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
printf("%-4d",a[i][j]);
printf("\n");
}
return 0;
}
#include<stdio.h>
#define N 5
int main(void)
{
int a[N+1][N+1]={0};
int i,j,key=1;
i=0;
j=(N+1)/2;
for(key=1;key<=25;key++) // 解法 第一个数字放在第一行第一列的正中央,然后向右(上)填,如果右上已有数字,则向下填...
{ if((key%N)==1) // 可判断 右上位置是否已经填上数字
i++;
else
{
i--;
j++;
}
if(i==0) // 如果是边界 则到第N行
i=N;
if(j>N) //如果是边界则到第1列
j=1;
a[i][j]=key;
}
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
printf("%-4d",a[i][j]);
printf("\n");
}
return 0;
}