【问题描述】把从1到n2(n为奇数)个自然数按方阵排列,使得方阵的每行、每列以及对角线的数字之和都等于一个方阵常量,这个常量是:0.5*n*(n2+1)。
【输入形式】用户在第一行输入n值,n必须为奇数。
【输出形式】程序输出魔方阵,每个数字占4个字符宽,采用默认对齐方式。每行输出n个数字之后要回车。
【样例输入】3
【样例输出】
8###1###6
3###5###7
4###9###2
【样例说明】输入n值为3,程序输出n=3的魔方阵,该魔方阵每行、每列及对角线数字之和均为15。每行每个数字输出占4个字符宽,并且每行后有一个回车换行。#表示空格(只是表示而已,不是要输出#)
【评分标准】结果完全正确得20分,每个测试点4分。提交程序名为:mofang.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int count = 1;
int row = 0,cul,n;
scanf("%d",&n);
cul=n/2;
int a[10][10] = {0};
while (count <= n*n)
{
a[row][cul] = count;
int i = row;
int j = cul;
if (i == 0)
{
i = n - 1;
}
else
{
i = i - 1;
}
j = (j + 1) % n;
if (a[i][j]!=0||(row==0&&cul==n-1))
{
i = row + 1;
j = cul;
}
row = i;
cul = j;
count++;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
system("pause");
}