平時很喜歡玩數獨遊戲,每天只要信報上有數獨遊戲,那就不看別的了,專心致志玩一路。
昨天突然想自己編乙個軟體來算吧,於是就有了這篇文章和乙個vb的數獨計算器。
談思想吧,思想最重要:我用了最最笨的方法,就是每個空位都從1~9挨個填,出了問題再折回來重新填。
所以這樣的想法一定要用到遞迴了,就是不斷呼叫自身來達到目的。
東西簡單,所以**也簡單:
我用了81個text來填數:text1(0)~text1(80),存到乙個 mtx(81)的陣列中。
而且先寫了乙個填寫檢查程式:(目的是檢查是否可以在x,y這個位置填入此num。)
function tcheck(arrayc() as integer, x as integer, y as integer,num as integer)
for i = 0 to 8
if mtx(i, y) = num then
tcheck = false
exit function
end if
if mtx(x, i) = num then
tcheck = false
exit function
end if
next i
for i = 0 to 2
for j = 0 to 2
if (arrayc((x/3)*3 + i, (y/3)*3 + j) = num) then
tcheck = false
exit function
end if
next j
next i
tcheck = true
end function
private function checkexistnum()
'檢查現有的資料是否存在問題
dim i as integer
dim j as integer
dim temp as integer
for i = 0 to 8
for j = 0 to 8
if (mtx(i, j) <> 0) then
temp = mtx(i, j)
mtx(i, j) = 0
if tcheck(mtx, i, j, temp) = false then
checkexistnum = false
errorstr = temp
text1(i * 9 + j).setfocus
exit function
end if
mtx(i, j) = temp
end if
next j
next i
checkexistnum = true
end function
下面這個程式就是最重要的遞迴函式了:
function calcarray(arrayn() as integer)
dim k as integer
dim i as integer
dim j as integer
for i = 0 to 8
for j = 0 to 8
if arrayn(i * 9 + j) = 0 then '原來的值為0才能進行賦值試驗
dim flag as boolean
flag = false
for k = 1 to 9 '準備填數
flag = tcheck(arrayn(), i, j, k)
if flag = true then
arrayn(i * 9 + j) = k
if calcarray(arrayn) = false then
arrayn(i * 9 + j) = 0
flag = false
else
calcarray= true
exit function
end if
end if
next k
if flag = false then
calcarray = false
exit function
end if
end if
next j
next i
calcarray = true
end function
ok,最後一步就是主函式了:
private sub calculatorct_click()
dim i, j as integer
sodoerror = 0
t = timer
transfer '這個就是將text1轉到mtx()中去
if sodoerror = 1 then
exit sub
end if
if checkexistnum = false then
msgbox "現有資料存在問題:" & errorstr
exit sub
end if
if calcarray(mtx) = false then
msgbox "無法解出", , "龍捲風數獨"
else
'將資料填回text1中
for i = 0 to 8
for j = 0 to 8
text1(j + (i * 9)) = mtx(i, j)
next j
next i
msgbox "計算完成", , "龍捲風數獨"
end if
end sub
呵呵,簡單吧!
http://download.csdn.net/source/1381913 完
用VB寫計算器
我是沒什麼心思寫計算器的。不過要參加星火杯的話這個坎還是要過一過。emmmm然後發現寫個gui真是步步艱難,先用了vs發現特麼廢流量,再用qt一直蜜汁錯誤。然後。然後最終還是向vb低頭orz 演算法上不存在什麼問題啦。只是不熟悉而且很多細節需要注意。debug幾下就好。最重要的是學到了用程式寫程式的...
寫乙個數獨計算器
終於有點閒暇的時間,翻翻以前的 突然看到有個好久以前寫的數獨計算器,一邊感嘆時光飛逝,一邊心中默默的噴自己 這些年都把自己糟蹋了。不扯了,老習慣,放在最後了,先上圖 特點 1.視覺化計算方式,可以單步執行也可以,也可以全部快速計算 2.提供同值檢測功能,高亮提醒輸入的錯誤值 3.提供計算解釋日誌功能...
用Java實現計算器
在學習 資料結構 這門課的時候,老是會想到模擬計算器的運算。雖說實驗裡面也有設計逆波蘭計算器的題目,但它只考察了棧和佇列的操作思想,沒有考慮到運算子的優先順序以及複雜組合情況 比如多層括號 因此其實用性並不大。今天試著寫了一下,看似很簡單,還是花費了一段時間的。這是最簡單的情況。1.首先 的運算等級...