所谓魔方阵,指的是1~n*n共n*n个自然数,排列成nXn的方阵,使得该方阵的每行、每列、对角线元素之和相等,并为只与n有关的常数,该常数为(1/2)nX(nXn+1)。
假定阵列的行列下标都从1开始,则魔方阵的生成方法如下:
1.在第1行中间置1;
2.假定当前元素的下标为(i,j),则对其余的2~n*n个数,基本的放置位置为当前位置的右上方,即下标为(i-1,j+1)。与此同时,若当前的数是n的倍数,则放在当前位置的正下方,即下标为(i+1,j);若i-1小于1,则将这个数放在本列的最下端;若j+1大于n,则将这个数放在本行的最左端。
#include "stdafx.h"
#include
#include
void Array(int n);
void main()
{
int n;
printf("Set n,please:\n");
scanf("%d",&n);
Array(n);
system("PAUSE");
}
void Array(int n)
{
int i, j, no, num, max;
int *mtrx;
if (n % 2 == 0)
{
n = n + 1;
}
max = n * n;