チャレンジに参加してきました。
与えられた質問は次のとおりです。
この質問は、テディベアのゲームに関するものです。ゲームはクマをあげるところから始まります。その後、いくつかのクマを返すことができますが、次のルールに従う必要があります (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