問題10 (tomhさん)

問題編

問(1):打率3割3分1厘を達成するために必要な最小打数はいくつでしょうか?

問(2):打率0割0分1厘から9割9分9厘までの999個のそれぞれの最小打数を
計算したとき、その999個の中で最大の打数はいくつでしょうか?

注:打率=安打/打数 で、打数は、安打と凡打の和です。また、打率は、
四捨五入により、小数点以下3桁に丸めます。問題にある”最小打数”とは、
結局、”最小分母”のことです。

解答編

tomh さん の解答
(1) (正則)連分数というものを考えます。
例えば、5/29 = 1/(5 +1/(1 +1/4))となります。
これを/5,1,4/と略記することにしましょう。
#この問題には関係ありませんが、形式的に
# 5/29 = /5,1,4,∞/
#と"∞"をつけて考えることもあります。
#また、連分数の数字には、"0"が出てこないことにも
#注意しましょう。
さて、打率3割3分1厘は”安打/打数”が、0.3305から0.3315の間にある
ことを意味しています。この両端の値を(正則)連分数に直すと、
 0.3305 = /3,38,1,7,2/,
 0.3315 = /3,60,3,1,2/
です。左から順番に見ていって、3のみが共通なので、
その次の38と60より、/3,39/の/3,59/いずれかが最小打数(分母)の
はずです。
 /3,39/ = 39/118,
 /3,59/ = 59/178
なので、118打数が最小となります。
#コンピュータでの計算も、もちろん可です。 (^^)

(2) (1)の方法で(またはコンピュータに計算させて)、
0.001から0.999の最小打数(の分数)を計算すると
0.001と0.999が一番大きい最小打数(分母)をもちます。
0.001 : 1 / 667
0.999 : 666 / 667
なので、667打数が答えです。


高橋の解答
0.0005 と0.0015を2倍 3倍 …n倍 していってその結果の数の間に整数が
あるときのnを見つける  1厘の打数の出来上がり

0.0015 と0.0025を2倍 3倍 …n倍 していってその結果の数の間に整数が
あるときのnを見つける  2厘の打数の出来上がり

というふうにしてコンピュータに計算させました。
めったにこんなことはしないのですが、計算が大変で…(^_^;)

EXCELのマクロです

Sub 整数()
 Kは割合です
For K = 1 To 999
 '数の範囲の決定
A = 0.0005 + 0.001 * (K - 1)
B = 0.0015 + 0.001 * (K - 1)

For I = 1 To 1000
  aa = A * I
  bb = B * I
 If aa < Int(bb) Then
    Cells(K + 1, 2) = I
    Cells(K + 1, 3) = B * I
    GoTo TUGI
 End If
Next I

TUGI:
Next K

End

End Sub

なか さん の解答
perlです 計算結果はこちら

for($a=1;$a<=999;$a++){
for($b=0;$b<$a;$b++){
$d=int(($b*2000/$a+1)/2);
if($u[$d] <1){
$u[$d]="$a";
$cnt++;
if($d==331){print "($cnt) $d=$b/$a\n"}
if($cnt==1000){print "($cnt) $d=$b/$a\n";exit}
}
}}

tomh さんの追加情報編

(2)で、最大の最小打数(ややこしい?)は、
0割0分1厘と9割9分9厘のときの667打数ということが分かりました。

では、昨年のプロ野球で、打数が一番多かったのは、
 仁志敏久(ジャイアンツ)597打数
 大村直之(バファローズ)590打数
 =参考= イチロー(マリナーズ) 692打数
なので、0割0分1厘なんてのは、達成が難しいわけですねぇ。 (^^;
#その前に2軍行きだよ… (^^;;

それでは、001から999までの999種をすべて経験するには、
どうすれば達成できるでしょうか。
私が見つけたやり方は、
 1-2打数:凡退
 3-1334打数:安打
 1335-888001打数:凡退
で、できます。生涯成績としても現実的ではありませんが…
これが最小打数の方法かどうかはわかりません。