如果整数方阵的每行各数之和、每列各数之各以及两个对角线上各数之和全都相等,则称之为幻方阵。此时,每行(每列或对角线)各数之和1/2 n(n2+1),称之为方阵常数。由自然数1~n2构成的n(n为>=3的奇数)阶幻方阵是最简单的一种。 幻方阵有以下规律: 1、数1放在第一行的正中一列 2、从数2起每数所在的行数比前一数所在的行数减1,所在的列数比前一数所在的列数加1。若行数超出下界(即I=0),则改为上界(令I=N),若列数超出上界(即J=N+1),则改为下界(令J=1)。若某数为N的倍数,则其后之数所在的位置为列数不变,行数加1。 首先在表单的Load事件代码中定义全局变量n用来存放所选择的幻方阵的阶数,定义全局变量数组Lab[1,1]用来存放显示幻方阵各个元素的标签组。 public lab(1,1),n 在表单的destroy事件代码中释放全局变量及数组: lab=0 release lab,n在表单的Activate事件代码中调用“布阵”按扭的click事件代码:thisform.command1.click容器container1的init事件代码:n=thisform.spinner1.valuedd=230/ndd=int(dd+.5)dime lab[n,n]for i =1 to n*n k=allt(str(i)) this.addobject('label&k','label') lab[i]=this.label&kendforfor i=1 to n for j=1 to n with lab[i,j] .left=dd*(j-1)+2 .top=dd*(i-1)+2 .height=dd .width=dd .visible=.t. .caption="" .backcolor=rgb(255,255,255) .forecolor=rgb(0,0,255) .alignment=2 .borderstyle=1 .fontsize=dd*.6 endwith endfor endfor this.height=dd*n+4 this.width=dd*n+4 编写“布阵”按钮command1的click事件代码:dime a(n,n)store 0 to ai=1j=(n+1)/2a(i,j)=1lab[j,j].caption=allt(str(1))for x=2 to n*n if a(i,j)%n=0 i=i+1 else i=iif(i=1,n,i-1) j=iif(j=n,1,j+1) endif a(i,j)=x lab[i,j].caption=allt(str(x))endfor 编写spinner1的interactive事件代码:for i= 1 to n*n a1=allt(str(i)) thisform.container1.removeobject('label&a1')endforn=this.valuethisform.container1.init编写“退出”按钮的command2的click的事件代码:thisform.release

评论