若正解者 無事1発
キョンシーさんのコメントのおかげで入力を間違える事もなく無事一発です。
なるほど、なんか感じた事のあるような確率近辺だと思っていたら、あのあたりでしたか。
ありがとうございました。
残り7件の証言をすべて表示
kikki ↑id違いますが、別のパソコンより。
うむ〜、ちなみに最終的に500万稼げるのか、それとも370万を使い果たしてしまうのか?をやってみますた(^ω^;)しんどかったです。
手計算ないしエクセルのbinomdist関数など駆使して出来ないものかと試みたのですが、無理という結論に達したので、大学で最近学習したばっかりのfortran95で頑張ってみますた。でも微妙に数値が合わないんですよねぇ。
作ってみたプログラミングも怪しそうなところは多々あるんですけど、何処で間違ってるのかが解んないという…。
kikki
ちなみにこんな感じでした。
program kakuritu
implicit none
integer :: x,y,n
real :: f,s
real,dimension(:,:),allocatable :: p
read (*,*) n
allocate(p(x,y))
p(0,100)=100
do 100 x=1,n
do 200 y=63,185
p(x,y)=p(x-1,y+1)*36/37 + p(x-1,y-35)/37
kikki
if (y==63) then
f=f+p(x,y)
p(x,y)=0
end if
if(y >= 150) then
s=s+p(x,y)
p(x,y)=0
end if
200 continue
100 continue
write(*,*) f
write(*,*) s
end program kakuritu
途中で切れた…。
kikki
「x」は試行回数、「y」は所持金、「s」は成功する確率、「f」は失敗する確率、と置いてみました。
p(x、y)はx回目の試行回数でyだけの所持金を持っている確率。
スタート時はx=0、y=100。ちなみにyを最初37とか置くと、途中pの()内がマイナスになると駄目らしくて…初期値設定を100に、そこから−37した67以下になった時点、あるいは+50した150以上になった時点で、試行をストップさせるようなプログラムを組んだんですよね。
ちなみにdo if y=63,185の185は「149」から+35(←)される可能性があるために抜かしたら確率変わると思う、多分。
そして試行がストップした時点で負けならその時の確率を「f」に勝ちならその時の確率を「s」に加算していくような形においてみました。
kikki
一回の試行で外れるときは36/37の確率で−10万円(説明不足すまぬ、10万=1と換算してやってます)、1/37の確率で+360万−10万=+350なので、p(x,y)=p(x-1,y+1)*36/37 + p(x-1,y-35)/37 と置いてます、
で、で、実際にコンパイル(?)してみるとかなりおしい値までいくんですよね。n=37を代入してみると、「f」の値はこの問題とピタリと一致しますし、nを大きくしていくと、s+fの値は100に近づいてくるんですが…。
でも微妙に違うというか…s→35、6 f→61、8ぐらいに大体収束してしまって、理論的に2つの和が100になっていかないとおかしいと思うんですが…この開きは何だろうってのと、22回の試行で50万を稼ぐ確率がエクセルで計算したとき(11、8ぐらい)だったのと変わってくる(fortran上では12、4ぐらい)のが何でだろう(・ω・)?とかなってます。
kikki
あ、長々とすいません、挨拶が遅れました!
と言いつつ特に何もないと言えば何もないですが…。
キョンシーさん・takaさん・若さん>
お疲れ様!&ありがとうございます!と言ってみます、いや、今から忙しかったりするので、また。
kikki
昨日の続きですが、fortranの方が配列が大きいことによるバグ(?)らしくなんか上手くいかなかったので(」・д・)「キシャー
愛用しているエクセルを使って計算してみました(^q^)しねた。1000×122マス(927KB)使ってfortranと同じ式を組み立ててみますた。
1000回目の施行で、成功確率「35、9773…」失敗確率「64、0226…」。意外と成功確率が大きいのでびっくりしたのですが、期待値計算してみると「約−17万6千」となって、妥当な値なのかなと思います、少し自信ないですが。