要求根据输入的一个奇数n来生成n*n的表格,使得,在表格中从1开始填写数字,直到表格填满,表格中每行相加和每列相加的和都相同.
一种方法是按照物理方法进行填充,现在请问怎么用数学方法,比如数组对这个问题进行解决...
大体的思路是:第一个数字也就是1要放在(n*n+1)/2这个列.同时可以确定此列的数字为等差数列...
问题是怎么确定行的数字呢?
恳请高手指教...
最后的显示结果应该是(用3和5为例):
输入3时:8 1 6
3 5 7
4 9 2
输入5时:17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
一种方法是按照物理方法进行填充,现在请问怎么用数学方法,比如数组对这个问题进行解决...
大体的思路是:第一个数字也就是1要放在(n*n+1)/2这个列.同时可以确定此列的数字为等差数列...
问题是怎么确定行的数字呢?
恳请高手指教...
最后的显示结果应该是(用3和5为例):
输入3时:8 1 6
3 5 7
4 9 2
输入5时:17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
#define N 3
main()
{int a[N][N];
int i,j,oi,oj,k;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=0;
i=0;
j=(N-1)/2;
a[i][j]=1;
for(k=2;k<=N*N;k++)
{oi=i;
oj=j;
i--;
j++;
if(i<0) i=N-1;
if(j>N-1) j=0;
if(a[i][j]==0) a[i][j]=k;
else
{i=oi+1;
j=oj;
a[i][j]=k;}}
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
printf("%d ",a[i][j]);
printf("nn");
}}你自己改一下吧
Form1.ScaleLeft = -3000Form1.ScaleTop = 2000
Form1.ScaleWidth = 6000 把form1.换成表格名 我不知道你用什么表格 print代替printf 还是用for 当然你觉得 do while do until 好也可以
我实在没时间~ 要不就 帮你了~!
这个比较复杂的 在C中他牵扯到了 倾斜算法
自己动手吧~!
高手快来阿...
急阿~~~~`