用vb編了個數獨計算器

2021-04-28 23:25:58 字數 2865 閱讀 8321

平時很喜歡玩數獨遊戲,每天只要信報上有數獨遊戲,那就不看別的了,專心致志玩一路。

昨天突然想自己編乙個軟體來算吧,於是就有了這篇文章和乙個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.首先 的運算等級...