- 帖子
- 2025
- 主題
- 13
- 精華
- 0
- 積分
- 2053
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- Office2007
- 閱讀權限
- 100
- 性別
- 男
- 來自
- 台北市
- 註冊時間
- 2011-3-2
- 最後登錄
- 2024-3-14
     
|
10#
發表於 2015-10-26 12:14
| 只看該作者
回復 9# bobomi
加入 bobomi 的
右 = [{0, 1, "→","┌"}]: 下 = [{1,0,"↓","┐"}]: 左 = [{0,-1,"←","┘"}]: 上 = [{-1, 0,"↑","└"}]
效果圖二就出來了
Option Base 1
Sub 以旋轉方式填入值()
xc = 10: yc = 10 '中心位置
右 = [{0, 1, "→","┌"}]: 下 = [{1,0,"↓","┐"}]: 左 = [{0,-1,"←","┘"}]: 上 = [{-1, 0,"↑","└"}]
yx = Array(右, 下, 左, 上) '控制方向及順時轉向
' 右 = [{0, 1, "→","└"}]: 下 = [{1,0,"↓","┌"}]: 左 = [{0,-1,"←","┐"}]: 上 = [{-1, 0,"↑","┘"}]
' yx = Array(下, 右, 上, 左) '控制方向及逆時轉向
n = InputBox("輸入排列數字", , 25)
[A1:Z26].ClearContents
x = xc: y = yc: xp1 = x: yp1 = y
Cells(x, y) = 1
f1 = "": f2 = ""
For i = 2 To n
ds = [{"","","",""}]
For j = 1 To 4 '四個方向
yy = yx(j)(1): xx = yx(j)(2)
If Cells(y + yy, x + xx) = "" Then
ds(j) = ((y + yy - yc) ^ 2 + (x + xx - xc) ^ 2) * 10 + j '距離*10+方向
End If
Next
k = Application.Min(ds) Mod 10 '取距離原點最短及排列最前方向
y = y + yx(k)(1)
x = x + yx(k)(2)
Cells(y, x) = i
方向符號 = IIf(i = 2, "◎", yx(k)(3 + IIf(k = kp1, 0, 1)))
Cells(yp1, xp1) = Cells(yp1, xp1) & 方向符號
yp1 = y: xp1 = x: kp1 = k
'Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 1)
Next
Cells(yp1, xp1) = Cells(yp1, xp1) & "●"
End Sub |
-
1
評分人數
-
|