bLog TOP

 

じゃんけん必勝テクの検証

simu.jpg
じゃんけんに勝つ方法があると言う。1回勝負でなく複数回なら勝てると。
その方法は、一度じゃんけんし、先ほど相手が出した手に負けるように次を出す。
例えば、相手がパーで自分がチョキで勝ったとする。なら次回、自分はグーを出す。
すると、相手が手を変えた時(先ほどはパーなので)グーかチョキ。勝つか引き分け。
人はじゃんけんの手を変えたがるので、勝つか引き分けが多くなり結果的に勝つと。
理屈ではなんとなく有利な気がせんでもないが気になる性格なので検証してみる。
プログラムを組んで100万回対戦させてみた。
名付けて 「じゃんけんシミュレーター for Windows」
で、結果は上記のとおり。まぁスッキリしたのでこれはこれで良しとしよう。
ちなみに、計算部分のソースコードはこんな感じになる。


Dim dummy, dat(2), ans(3), per(3), dat2(3), ans2(3), per2(3) As Single
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For j = 1 To 3 : ans(j) = 0 : ans2(j) = 0 : Next :  Randomize()
For d = 1 To Val(TextBox1.Text) : dat(1) = CInt(Int((3 * Rnd()) + 1)) : dat(2) = CInt(Int((3 * Rnd()) + 1))
     Select Case dat(1) – dat(2) 
     Case 0 : ans(3) = ans(3) + 1:Case -1, 2 : ans(2) = ans(2) + 1:Case -2, 1 : ans(1) = ans(1) + 1
     End Select
For k = 1 To 3 : per(k) = Int((ans(k) / Val(TextBox1.Text)) * 100):Next
         Label13.Text = Str$(ans(1)) + ” (” + Str$(per(1)) + “%)”
         Label12.Text = Str$(ans(2)) + ” (” + Str$(per(2)) + “%)”
         Label9.Text = Str$(ans(3)) + ” (” + Str$(per(3)) + “%)” : dat2(1) = -1
     Select Case dat2(1) 
     Case -1 : dat2(2) = CInt(Int((3 * Rnd()) + 1)):Case 1 : dat2(2) = 2
     Case 2 : dat2(2) = 3 : Case 3 : dat2(2) = 1:End Select : dat2(1) = CInt(Int((3 * Rnd()) + 1))
     Select Case dat2(1) – dat2(2)
     Case 0 : ans2(3) = ans2(3) + 1:Case -1, 2 : ans2(2) = ans2(2) + 1:Case -2, 1 : ans2(1) = ans2(1) + 1
     End Select
For k = 1 To 3 :  per2(k) = Int((ans2(k) / Val(TextBox1.Text)) * 100) : Next
Label7.Text = Str$(ans2(1)) + ” (” + Str$(per2(1)) + “%)” : Label6.Text = Str$(ans2(2)) + ” (” + Str$(per2(2)) + “%)” :Label2.Text = Str$(ans2(3)) + ” (” + Str$(per2(3)) + “%)”:Next : Label14.Text = “計算完了”
End Sub


 

bLog TOP