输出“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为
8 1 6
3 5 7
4 9 2
要求输出1~n^2的自然数构成的魔方阵。
魔方阵(环形数组)方法:
1.1方在第一行的中间
2.当前数字放在前一个数字的上一行,后一列。
3.如果当前位置已存放数据,则放在前一个数字的下一行,同列。
#include<stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <vld.h>
#include <ctype.h>
void MagicSquare()
{
#define ROW 5assert(ROW%2 != 0);//保证是奇数int arr[ROW][ROW] = {0};int row = 0;int col = ROW/2;arr[row][col] = 1;for(int i=2;i<=ROW*ROW;i++){row = (row-1+ROW)%ROW;//3,上一行col = (col+1)%ROW;//后一列if(arr[row][col] != 0)//已经有值{row = (row+2)%ROW;col = (col-1+ROW)%ROW;}arr[row][col] = i; }for(int i=0;i<ROW;i++){for(int j=0;j<ROW;j++){printf("%-3d ",arr[i][j]);}printf("\n");}
}
int main()
{MagicSquare();return 0;
}
运行结果: