VBA實現任意n階幻方的一種填法 n 3

2021-04-13 10:57:50 字數 2236 閱讀 9068

參考http://blog.csdn.net/northwolves/archive/2007/09/23/1796696.aspx的思路,擬**如下:

sub magicsquare(byval n as long, byref matrix())

dim i as long, j as long, k as long, p as long, a(), b()

redim matrix(1 to 256, 1 to 256)

if n < 3 then msgbox "n must be larger than 2! ": exit sub 'n不得小於3

if n mod 4 = 0 then '雙偶階幻方(n為偶數,且能被4整除)

redim a(1 to n, 1 to n)

redim b(1 to n, 1 to n)

for i = 1 to n

for j = 1 to n

matrix(i, j) = iif((i mod 4) / 2 = (j mod 4) / 2, n * n + 1 - (i - 1) * n - j, (i - 1) * n + j)

next

next

else

if n mod 4 = 2 then '單偶階幻方(n為偶數,且不能被4整除)

p = n / 2

redim a(1 to p, 1 to p)

magicsquare p, a

for i = 1 to p

for j = 1 to p

matrix(i, j) = a(i, j)

matrix(i + p, j) = a(i, j) + 3 * p * p

matrix(i, j + p) = a(i, j) + 2 * p * p

matrix(i + p, j + p) = a(i, j) + p * p

next

next

for j = 1 to p

if j = p / 2 + 1 then

for i = 1 to (n - 2) / 4

k = matrix(j, p / 2 + i)

matrix(j, p / 2 + i) = matrix(j + p, p / 2 + i)

matrix(j + p, p / 2 + i) = k

next

else

for i = 1 to (n - 2) / 4

k = matrix(j, i)

matrix(j, i) = matrix(j + p, i)

matrix(j + p, i) = k

next

end if

if n > 6 then

for i = 1 to (n - 6) / 4

k = matrix(j, p + p / 2 + i)

matrix(j, p + p / 2 + i) = matrix(j + p, p + p / 2 + i)

matrix(j + p, p + p / 2 + i) = k

next

end if

next

else '奇數階幻方

for j = 0 to n - 1

for i = 0 to n - 1

if j = 0 then matrix(j + 1, i + 1) = iif(i >= (n - 1) / 2, 0, n * (n + 1)) + (i - (n - 1) / 2) * (n + 2) + 1

if j > 0 then matrix(j + 1, i + 1) = 1 + (n * n + matrix(j, i + 1) + iif(matrix(j, i + 1) mod n = 0, 0, n)) mod n ^ 2

next

next

end if

end if

end sub

sub makemagicsquare()

dim arr(), n as long

randomize

n = clng(inputbox("please enter an integer", "infomation", 3 + int(rnd * 254)))

magicsquare n, arr

[a1].resize(256, 256) = arr

[a1].resize(256, 256).columns.autofit

end sub 

java基礎演算法 n階幻方的實現

說到幻方,很多人可能還不知道什麼是幻方。幻方是一種將一些連續的正整數安排在正方形格仔中,使每行 列和對角線上的數字和都相等的方法。因為正方形格仔可能是3 3或者n n的,所以幻方就有了幾階幻方的說法。需要注意的是幻方最低是3階!三階幻方 四階幻方 一 奇數階幻方我採用了最簡單的羅伯法 1 將最小的數...

Creator填色遊戲的一種實現方案

先上一張圖 這是一張我在 繪圖遊戲調色盤取色方法 的文章中展示的一張圖,左側的色盤是原始圖,右側是使用相機截圖獲得的資料更新後的圖。當時是為了驗證截圖的正確性而做的。這次正好用來做填色遊戲。製作原理 實際上更改的就是右側這張圖使用的資料。左側的圖接收觸控事件,通過觸控點的位置,更新顏色資料。所以只要...

一種基於ccs3的timeline實現方法

該控制項的實現過程較為簡單,主要由test.html檔案和timeline.css檔案組成。具體 如下 1 標題一label class date t1span class circle span div class content 長安元年 701年 李白,字太白。其生地今一般認為是唐劍南道綿州 ...