摘 要: 魔方陣是一個(gè)非常有趣的數(shù)學(xué)問題,是指由自然數(shù)1—N2(N為奇數(shù))構(gòu)成的方陣,其各行、各列,以及對角線元素之和均相等。本文介紹了一種簡單的排列方法,并巧用Excel中的單元格和宏代碼的結(jié)合將其排列過程動態(tài)地呈顯出來。
關(guān)鍵詞: Excel 魔方陣難題 巧解
Excel是一個(gè)功能強(qiáng)大的電子表格管理軟件,它可以幫助用戶組織、計(jì)算和分析各種類型的數(shù)據(jù),還可以生成與原始數(shù)據(jù)相連接的各種類型的圖表,因而被廣泛應(yīng)用于統(tǒng)計(jì)、財(cái)務(wù)、金融和審計(jì)等眾多領(lǐng)域。下面筆者就Excel巧解魔方陣難題作一個(gè)簡要的證明。
魔方陣是一個(gè)非常有趣的數(shù)學(xué)問題,是指由自然數(shù)1—N2(N為奇數(shù))構(gòu)成的方陣,其各行、各列,以及對角線元素之和均相等(如下圖所示)。魔方陣的數(shù)學(xué)排列算法很復(fù)雜,若不懂得排列規(guī)律,很難排出魔方陣。筆者在此介紹一種簡單的排列方法,并巧用Excel中的單元格和宏代碼的結(jié)合將其排列過程動態(tài)地呈顯出來(速度由用戶自己控制),呈現(xiàn)出來之后可借助Excel中的求和函數(shù)對各行、各列進(jìn)行求和驗(yàn)證。更不可思議的是宏代碼只有25行,簡練程度勝過任何編程工具。

一、算法簡介
先將所有單元格清空,讀取階數(shù)N之后把1放入第一行的中間一列,此后依次尋找2到N2這些數(shù)放入的位置,基本算法是:下一個(gè)數(shù)放在前一個(gè)數(shù)的上一行的下一列(第一行的上一行是最后一行,最后一列的下一列是第一列);如果此位置已被占用(單元格的內(nèi)容非空),則將它放在前一個(gè)數(shù)的下面。
注:任一單元格(H行L列)的地址可表示為Chr(L+64) H,其中Chr是取字符的函數(shù)。
二、用Excel實(shí)現(xiàn)的方法
1.界面設(shè)計(jì)
啟動Excel,通過“視圖”菜單打開“窗體”工具欄,在第一行添加一個(gè)按鈕控件,并在彈出的對話框中單擊“新建”按鈕,進(jìn)入宏代碼編輯窗口。
2.錄制宏
在宏代碼編輯窗口中輸入以下代碼:
Sub 按鈕1_單擊()
N=Val(InputBox(“奇數(shù):3…25”,“階數(shù)”,3))
If N Mod 2=0 Or N<3 Or N>25 Then Exit Sub
T=Val(InputBox(“單位:秒”,“總時(shí)間”,5))
Columns(“A:IV”).Select
Selection.ClearContents
H=1:L=(N+1)/2
Range(Chr(L+64) H+2)=1
Range(Chr(L+64) H+2).Select
Range(Chr(L+64) H+1)=N “階魔方陣”
For S=2 To N*N
t1=Timer
Do
Loop While Timer-t1<T/N^2
H=H-1:L=L+1
If H<1 And L>N Then H=2:L=N
If H<1 Then H=N
If L>N Then L=1
If Range(Chr(L+64) H+2)<>“” Then
H=H+2:L=L-1
End If
Range(Chr(L+64) H+2)=S
Range(Chr(L+64) H+2).Select
Next S
End Sub
3.運(yùn)行
關(guān)閉宏代碼窗口,進(jìn)入Excel后先單擊任一單元格或按Esc鍵,以取消按鈕的編輯狀態(tài);然后單擊前面添加的按鈕就可運(yùn)行:在彈出的對話框中先輸入要顯示的魔方陣的階數(shù),后輸入顯示整個(gè)魔方陣所用的時(shí)間;最后就可看到魔方陣中元素的動態(tài)排列過程。感興趣的讀者可借助Excel提供的函數(shù)進(jìn)行求和驗(yàn)證。
4.說明
如果將宏代碼及界面保存成Excel文件,下次打開時(shí)將提示:該文件中包含宏,宏可能會攜帶病毒等信息。自己編寫的這段宏是安全的,選擇“啟用宏”即可。本代碼在Excel 2000和Excel 2003中運(yùn)行通過。
三、結(jié)語
隨著計(jì)算機(jī)教育的不斷普及,我們感到了現(xiàn)代科技給我們帶來的方便。我們平時(shí)要不斷地學(xué)習(xí)專研,來改造我們現(xiàn)實(shí)生活中的一系列難題。這也是新背景新時(shí)代素質(zhì)教育的要求。現(xiàn)在我國正處在國際大環(huán)境的激烈競爭之中,要想在各個(gè)方面處于世界的前列,教育應(yīng)該勇挑重?fù)?dān),而動手動腦又是當(dāng)前素質(zhì)教育的重中之重。
參考文獻(xiàn):
[1]朱明.Excel數(shù)據(jù)透視表應(yīng)用大全[M].北京:人名郵電出版社,2009.
[2]李世賢.實(shí)用計(jì)算機(jī)應(yīng)用[M].北京:人名郵電出版社,2005.
[3]李笑來.把時(shí)間當(dāng)做朋友——應(yīng)用心智獲得解放[M].北京:電子工業(yè)出版社,2009.