小数第2位を四捨五入して5を足すと3倍になる /「算数にチャレンジ!!」第1140問

問題概略

正の有理数  x (整数でない)があります。
 x を 4 で割り,小数第 2 位を四捨五入してから 5 を加えると  x のちょうど 3 倍になりました。
もとの有理数  x を求めてください。

http://www.sansu.org/used-html/index1140.html

解説の pdf も作りました。きれいなレイアウトで読みたい方はこちらをどうぞ。

drive.google.com

ガウス記号を使う

小数第 2 位を相手にするのは面倒なので 10 倍して考えます。問題設定はこうなります。

正の有理数  10x(整数でもよい)を 4 で割り,小数第 1 位を四捨五入してから 50 を加えると  10x のちょうど 3 倍になる。

四捨五入した後の数は  \lfloor\frac{10}{4}x\rfloor または  \lfloor\frac{10}{4}x\rfloor+1 なので,次のどちらかが成立します。

 \lfloor\frac{10}{4}x\rfloor+50=30x または  \lfloor\frac{10}{4}x\rfloor+1+50=30x

左辺は整数なので右辺も整数。 n を整数として  30x=n とおくと  x=\frac{n}{30} です。

 \lfloor\frac{10}{4}x\rfloor=\lfloor\frac{n}{12}\rfloor を使って上の式を  n で書き直しましょう。

 \lfloor\frac{n}{12}\rfloor=n-50\mbox{ ……(1)} または  \lfloor\frac{n}{12}\rfloor=n-51\mbox{ ……(2)}

 n を 12 で割ったときの商と余りを  m,  r とおきます。 n=12m+r 0\leqq r\leqq 11 から

 \lfloor\frac{n}{12}\rfloor=\lfloor m+\frac{r}{12}\rfloor=m\mbox{ ……(3)}

(1)の四捨五入は切り捨てなので  0\leqq r< 6\mbox{ ……(4)} です。(1)(3)より

 m=12m+r-50\Leftrightarrow 11m+r=50

これの解は  (m,\, r)=(4,\, 6) ですが,(4)をみたさないので不適。

(2)の四捨五入は切り上げなので  6\leqq r\leqq 11\mbox{ ……(5)} です。(2)(3)より

 m=12m+r-51\Leftrightarrow 11m+r=51

 (m,\, r)=(4,\, 7) になり,これは(5)をみたします。 n=12m+r=55 なので

 x=\frac{n}{30}=\frac{11}{6}

不等式で評価

小数第 2 位を四捨五入した数は  3x-5 で,これは小数第 1 位までの数なので 10 倍すると整数になります。
 10(3x-5)=30x-50 は整数です。 30x=n n は整数)とおけます。

 x=\frac{n}{30} なので  x=\frac{q}{p} p,  q は互いに素な自然数)とおくと  p は 30 の約数です。
ただし  x は整数ではないので  p\ne 1 です。

 p=2,\, 3,\, 5,\, 6,\, 10,\, 15,\, 30\mbox{ ……(6)}

さて, 3x-5 \frac{x}{4} の小数第 2 位を四捨五入した数でした。

四捨五入で最も小さくなるのは  0.049\cdots を切り捨てるときで,最も大きくなるのは  0.05 を切り上げるときです。

 \frac{x}{4}-\frac{1}{20}< 3x-5\leqq \frac{x}{4}-\frac{1}{20}+\frac{1}{10} \Leftrightarrow \frac{9}{5}< x\leqq \frac{101}{55}

 \therefore 1.8< x< 1.836\cdots

これを  1+0.8< x< 1+0.83\cdots と考えて(6)をみたす  x=\frac{q}{p} を探すと  x=1+\frac{5}{6}=\frac{11}{6} しかありません。これが答えです。

mathematicaで解くなら

「mathematica,四捨五入」で検索すると Round という関数がヒットしますが,これは文字通り丸め用の関数で, 1/2 に対して 0 を返します。この問題には使えません。

FractionalPart で小数部分を取り出して,それが  1/2 より大きいかどうかを Boole で処理しました。
他のプログラミング言語でも  x-\lfloor x\rfloor 1/2 の大小比較が必要だと思います。

    In[]:= AbsoluteTiming[
        eqn = {Floor[10 x/4] + 50 + 
            Boole[FractionalPart[10 x/4] >= 0.5] == 30 x, x > 0};
        ans = x /. Solve[eqn, x]]

    Out[]= {0.0174566, {11/6}}


variee.hatenablog.com