1

チャレンジに参加してきました。

与えられた質問は次のとおりです。

この質問は、テディベアのゲームに関するものです。ゲームはクマをあげるところから始まります。その後、いくつかのクマを返すことができますが、次のルールに従う必要があります (n は所有しているクマの数です)。

n が偶数の場合、正確に n/2 の熊を返すことができます。n が 3 または 4 で割り切れる場合、n の下 2 桁を掛けて、この数のクマを返すことができます。(ちなみに、n の最後の桁は n%10 で、その次の桁は ((n%100)/10) です。n が 5 で割り切れる場合、ちょうど 42 匹のクマを返すことができます。このゲームの目標は、ちょうど 42 匹のクマを集めることです。

たとえば、250 頭のクマから始めるとします。次に、これらの動きを行うことができます。

-- 250 匹のクマから始めます。

-- 250 は 5 で割り切れるので、42 個のクマを返すことができ、208 個のクマが残ります。

-- 208 は偶数なので、残りの 104 個の熊を返すことができます。

-- 104 は偶数なので、52 個のクマを残して半分のクマを返すことができます。

-- 52 は 4 で割り切れるので、最後の 2 桁を掛けると (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) を使用します。

これが私の解決策ですが、残念ながら常に false を返します。代替パス全体をたどっているとは思いませんが、その理由はわかりません。ところで、私は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
4

2 に答える 2

1

(さらに熟考すると、唯一の問題は以下で参照されている行であることがわかります..)

.. ちょっと待ってください。これは 1 行を変更するだけでできるようです。MOD 3 または 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)
于 2013-08-27T21:33:48.663 に答える