作业帮 > 综合 > 作业

关于VB的枚举法和递推问题

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/18 00:13:40
关于VB的枚举法和递推问题
最近在学VB,碰到类似二元递推的问题一直找不到合适的表达方式.比如有一题,上十三个台阶的,规定一次只能上1个或者2个台阶,求所有的上台阶方案组合及其总数.递推式很显然为n=n+1 或者 n= n+2,但是要怎么样让计算机随机(或者是按某种顺序)地去选择加上去的是1或者是2,又或是更多的呢?
类似地还有一根钢管长多少多少,然后有两种截取方法,问是截取后剩下的最少的截取方案等等..纠结就在于那个每次变化的取值要可以在2个之中任意取,又要都取到~脑子有点糊涂,
还有,一个小小的问题,要怎么样让7个变量在7个数值中任意选取,但两两互不重复呢?(打个比方而已)要构造function要怎么构造啊~
递归的方法,形式如下:
function findit(varStep)
call findit(1)
call findit(2)
end function
具体代码(VB6下测试通过)
窗体上放一个文本框(Name=txtResult,MultiLine=True)和按钮(name=cmdCalc)
Private pCount As Long
Private strResult As String
Private Sub cmdCalc_Click()
pCount = 0
strResult = ""
Call FindIt(13,1,"")
Call FindIt(13,2,"")
txtResult.Text = strResult '显示结果
cmdCalc.Caption = Format(pCount)
pCount = 0
strResult = ""
End Sub
Private Function FindIt(nValue As Integer,nStep As Integer,strPath As String) As Boolean
Dim nValTemp As Integer
Dim strCurPath As String
nValTemp = nValue - nStep'下一步可用的台阶
strCurPath = strPath & Format(nStep)'记录这一步的走法(1或者2)
Select Case nValTemp
Case Is < 0 '尝试失败,直接退出
FindIt = False
Exit Function
Case 0 '成功获得一种走法,记录走法,计数加1
pCount = pCount + 1
strResult = strResult & IIf(Len(strResult) > 0,vbCrLf,"") & strCurPath
FindIt = True
Exit Function
Case Else '还没走完
Call FindIt(nValTemp,1,strCurPath)
Call FindIt(nValTemp,2,strCurPath)
End Select
End Function
再问: 不好意思啊~我的水平有限,看看不太懂您写的代码,包括findit的这个函数。其实好像这个问题没有您写得那么“高深”啊~ 这个练习是在我们学完了循环语句之后的,您能不能用循环语句给我做一遍呢~辛苦您啦~ 或者您给我说说思路吧,我就是不知道该怎么样在每一步有两种选择方案时进行随机选择。
再答: 很抱歉,对这方面我也不是很熟,没法用循环来表示遍历。期待其他高手来解答! 要纠正一点,这问题不是随机,而是遍历,就是说所有的情况都要列举出来。用递归来表示遍历思路上最简单,就是实现的时候有点麻烦,可能要设置一些临时变量和标记变量。 函数findit()的思路就是:先假设要走的台阶数还有13,对每种走法进行尝试。如果还有台阶,则调用它本身,对于走1步和走2步分别进行尝试。如果可走的台阶为0,则说明得到一种走法,0说明还有台阶,继续调用过程本身。
再问: Private Sub Command1_Click() Cls Dim a%(0 To 13), i% a(0) = 0 a(1) = 1 i = 2 Do While i