要求根据输入的一个奇数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.   

    C  语言的 算法#include<stdio.h>
    #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");
    }}你自己改一下吧
      

  2.   

    Form1.ScaleHeight = -4000
    Form1.ScaleLeft = -3000Form1.ScaleTop = 2000
    Form1.ScaleWidth = 6000 把form1.换成表格名 我不知道你用什么表格   print代替printf   还是用for 当然你觉得 do while do until 好也可以
     我实在没时间~ 要不就 帮你了~! 
    这个比较复杂的  在C中他牵扯到了 倾斜算法
     自己动手吧~!
      

  3.   

    我想在vb中的vsFlexGrid控件的表格中显示结果,不知道有什么比较好的方法么?
    高手快来阿...
    急阿~~~~`