1樓:匿名使用者
你的舉例很簡bai單的啊,用dufor 迴圈就可以實現。
private sub ***mand1_click()i = 0
for a = 1 to 9
for b = 3 to 9
if a + b = 15 then list1.additem "a=" & a & ";b=" & b: i = i + 1
next b
next a
print "a+b=15符合條件的zhi解法有:
dao" & i & "種"
end sub
計算出來符合條件的解為
內4組。
因為你的題容目太簡單了,我不知道到底從哪兒給你說起。所以就把你那個例子的解法寫給你了。
2樓:匿名使用者
要列舉所有的可能性,都計算一下~
因為求解的過程中,涉及的變數很多,而且變數、約束條件的個數是不定的。
vb乙個演算法問題。
3樓:匿名使用者
樓主到現在還沒結貼證明還沒找到所求,正好有空,我就補上vb6的碼:
問題考點:數字組合演算法,就用最簡單的遞迴吧。
你先建三text,text1的屬性:scrollbars設為2 multiline設定true, text1縱軸拉長點,text2、text3左右拉長點點(好看數),以及一***mand1
option explicit
dim sourcearray, dstarray, strsum as string, i***ist() as integer
private sub ***bine(a, n as integer, m as integer, b, mm as integer) '遞迴演算法
dim i%, j%, strsum$, sum%
for i = n to m step -1
b(m - 1) = i - 1
if m > 1 then
call ***bine(a, i - 1, m - 1, b, mm)
else
sum = 0
strsum = ""
for j = mm - 1 to 0 step -1
sum = sum + a(b(j))
strsum = strsum & a(b(j)) & "+"
next j
i***ist(sum) = 1
strsum = left$(strsum, len(strsum) - 1) & "=" & sum
text1 = text1 & strsum & vbcrlf
doevents
end if
next i
end sub
private sub ***mand1_click()
dim ncount as integer, arraymax as integer, arraymin as integer, strtemp as string, inttemp as integer
dim i as integer, sum as integer
ncount = inputbox("請輸入該系列數字的總數:")
arraymin = inputbox("請輸入該系列數字的最小值:")
do while arraymax <= arraymin
if arraymax <> 0 then
arraymax = inputbox("最大值必須比最小值" & arraymin & "大,請輸入該系列數字的最大值:")
else
arraymax = inputbox("請輸入該系列數字的最大值:")
end if
loop
randomize
text1 = ""
text2 = "該系列數字具體為:"
for i = 1 to ncount
inttemp = int(rnd * (arraymax - arraymin + 1) + arraymin) '隨機產生數字
text2 = text2 & inttemp & " "
strtemp = strtemp & inttemp & " "
next
sourcearray = split(rtrim$(strtemp))
dstarray = split(rtrim$(strtemp))
for i = 0 to ncount - 1
sum = sum + sourcearray(i)
next i
redim i***ist(sum) as integer
text3 = "計算中,請稍等......"
for i = 1 to ncount
call ***bine(sourcearray, ncount, i, dstarray, i)
next
text3 = "可能的和一定沒下列數字:"
for i = 0 to sum
if i***ist(i) = 0 then
text3 = text3 & i & " "
end if
next
text3 = text3 & "以及大於" & sum & "的所有數" '最終結果
end sub
4樓:世慷
//就像你上面的資料3,
7,4,5,4,8,20.用下面的**得到的結果是(不包含)
1、2、6、9、12、13、16、17、21、24、25、26、28、29、32、33、35、36、37、38、40、41、42、44、45、46、47、48、49、50、51、
//原理就是塞選法.這個演算法是很笨的。其實你可以先考慮排下序試試
private i***it(0) as boolean
private n, sumtemp as integer 'n表示第幾層
private data(0) as integer
private sub mainrun(byval s() as integer)
dim ret as string = ""
dim i as integer
data = s
n = data.length - 1
for i = 0 to n
sumtemp += data(i)
next
redim i***it(sumtemp)
sumtemp = 0
while n > 0
callrun(0, n)
n -= 1
end while
for i = 1 to i***it.length - 1
if i***it(i) = false then
ret += i.tostring + "、"
end if
next
messagebox.show(ret)
end sub
private sub callrun(byval index as integer, byval n2 as integer)
dim i, temp as integer
if n2 = 1 then
for i = index to data.length - 1
i***it(sumtemp + data(i)) = true
next
sumtemp = 0
else
temp = sumtemp
n2 -= 1
for i = index to data.length - n2 - 1
sumtemp = temp + data(index)
callrun(index + 1, n2)
next
end if
end sub
private sub test()//測試函式
dim s() as integer =
mainrun(s)
end sub
5樓:匿名使用者
做乙個不定長的陣列
輸入資料到陣列
從0到全部數的和迴圈
從陣列第乙個到最後乙個迴圈對比
如果不是 則顯示此數
6樓:
表達得不夠清楚 還不是沒有理解你的意圖
vb的乙個演算法問題
7樓:網海1書生
你換個思路嘛!用累加就很容易解決了,用不著考內慮有多少種組合!
容dim x as single
if check1.value=1 then x=x+val(text1.text)
if check2.value=1 then x=x+val(text2.text)
if check3.value=1 then x=x+val(text3.text)
if check4.value=1 then x=x+val(text4.text)
if check5.value=1 then x=x+val(text5.text)
text0.text=x
8樓:
用二進位制解復
決吧。選中制
的科目為1,未選中的科目為0,那總共是2^5=32種。去掉全都不選,剩31種。
然後你就可以用 select case 來解決這個問題了。
在實際應用中,你還可以考慮直接按位計算來解決,連select case都不用。
例如:假設所選科目資訊儲存在變數k裡面
那麼結果可以是 結果= 科目1成績 x (k and 2^1) + 科目2成績 x (k and 2^2) + ......
這樣如果沒選該科目,乘以零的結果也必然為零,自然就忽略掉了。
9樓:匿名使用者
給你個思路:
bai先定義個總du分數變數
zhi fen,再建立乙個checkbox陣列,daocheck(1),check(2)......然後用for ***x 迴圈遍
專歷陣列,在屬迴圈內,if chedk(i).value=1,then fen =fen+val(text(i).text) ,在迴圈外,text0.text=fen。
希望能幫到你!
vb 演算法問題 20
10樓:匿名使用者
你這種**簡單當然是非常簡單的小兒科了,但就是你必須把「大小大」和「奇
內偶奇」這樣的命令組合容全部考慮完善,不能說是「這是隨便輸入的,不是固定的」,如果程式編寫是按「大小大」或「大大小」考慮的、萬一你輸入乙個「不小不大」那就無法執行了哦。
VB的演算法問題,VB的乙個演算法問題
你換個思路嘛!用累加就很容易解決了,用不著考內慮有多少種組合!容dim x as single if check1.value 1 then x x val text1.text if check2.value 1 then x x val text2.text if check3.value 1 ...
簡單VB問題,乙個簡單VB問題
上面的兄弟是考lz的改錯技術嗎?我改了一下macrotian給的 private sub command1 click dim pro as double dim i as integer n text1.text pro 1 for i 1 to n if i mod 2 0 then pro p...
排列組合的演算法問題,乙個排列組合的演算法問題
貌似是求組合的,現寫了個比較簡單的,可得出任意n選m的組合 include include void print int beg,int end void c int n,int m else if m n return p int malloc sizeof int m for i 1 i m i...