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

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