我遇到了一个挑战。
以下是给出的问题:
这个问题涉及一个与泰迪熊的游戏。当我
给你一些熊。你可以还一些熊,但你必须
遵循这些规则(其中n是你拥有的熊的数量):
如果n是偶数,那么你可以精确地返回n/2个熊。如果n是
可被3或4整除,然后可以将n的最后两位数字相乘
把这么多熊还给我。(顺便说一下,n的最后一个数字是
n%10,最后一位的下一位是((n%100)/10)如果n可被整除
5,那么你可以把42只熊还给我。比赛的目的是
最终只有42只熊。
例如,假设您从
250只熊。然后你可以做这些动作:
--从250只熊开始。
--因为250可以被5整除,你可以返回42个熊,剩下208个熊。
--既然208是平的,你可以归还一半的熊,留下104只熊。
--因为104是平的,你可以归还一半的熊,留下52只熊。
--因为52可以被4整除,所以可以将最后两位数字相乘(结果是10)并返回这10个空位。剩下42个
熊。
--你已经达到目标了
编写递归函数以满足此规范:
bool bears(int n) // Postcondition: A true return value means that it is possible to win // the bear game by starting with n bears. A false return value means that // it is not possible to win the bear game by starting with n bears. // Examples: // bear(250) is true (as shown above) // bear(42) is true // bear(84) is true // bear(53) is false // bear(41) is false
提示:要测试n是否为偶数,请使用表达式((n%2)==0)。
这是我的解决办法,但它总是顽固地返回错误。我想它并没有遵循所有的替代路径,但不知道为什么。顺便说一下,我对vb很陌生。提前谢谢。

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MsgBox(bear(Int(TextBox1.Text)))
    End Sub
    Public Function bear(bc As Integer) As Boolean
        Dim way1, way2, way3 As Integer
        If bc = 42 Then
            Return True
        ElseIf bc < 42 Then
            Return False
        ElseIf (bc Mod 2 = 0) Or (bc Mod 3 = 0) Or (bc Mod 4 = 0) Or (bc Mod 5 = 0) Then

            If (bc Mod 2 = 0) Then
                way1 = bear(bc / 2)
            End If
            If (bc Mod 3 = 0) Or (bc Mod 4 = 0) Then
                way2 = bear((bc Mod 10) * ((bc Mod 100) / 10))
            End If
            If (bc Mod 5 = 0) Then
                way3 = bear(bc - 42)
            End If
            If (way1 Or way2 Or way3) Then
                Return True
            Else
                Return False
            End If
        Else
            Return False
        End If
    End Function

最佳答案

(经过进一步思考,我现在可以看到,唯一的问题是下面引用的行..)
.. 等等,看来你只要换一条线就行了。在MOD 3或MOD 4的情况下,更改此行:

way2 = bear((bc Mod 10) * ((bc Mod 100) / 10))

致:
dim gb as Integer
gb = (bc Mod 10) * ((bc Mod 100) / 10)
If gb <= 0 then Return False
way2 = bear(bc - gb)

09-27 10:19