コップの水を移して平均化する問題 /「算数にチャレンジ!!」第1140問

問題概略

ア,イ,ウの 3 つのコップの中に水が入っていて,イとウの水の量は同じでアだけは量が異なっています。
次のような「操作」を行います。

  • 操作1 アとイの水の量が同じになるようにする
  • 操作2 イとウの水の量が同じになるようにする
  • 操作3 ウとアの水の量が同じになるようにする
  • 操作4 アとイの水の量が同じになるようにする
  • 操作5 イとウの水の量が同じになるようにする
  • 操作6 ウとアの水の量が同じになるようにする

操作終了後ア,イ,ウのコップの中の水は  68.5\,\mathrm{g},  67\,\mathrm{g},  68.5\,\mathrm{g} になりました。

はじめアのコップに入っていた水は何  \mathrm{g} だったでしょうか。

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

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

drive.google.com

お品書き

順番通りに各操作の結果を計算する(解法 1)か逆変換を考える(解法 2)のが自然だと思いますが,平均からのずれに注目すると数が小さくて楽です(解法 3)。
また,各回の操作で最大値と最小値の差が半分になることに注目しても解けます(解法 4)。
おまけとして mathematicaで 解いたときのコードも載せました。

解法1:合成変換を考える

各操作は次のような変換であらわされます。
\begin{align*}
&f:(a,\,b,\, c)\to \left(\frac{a+b}{2},\, \frac{a+b}{2},\, c\right)\\[3pt]
&g:(a,\,b,\, c)\to \left(a,\, \frac{b+c}{2},\, \frac{b+c}{2}\right)\\[3pt]
&h:(a,\,b,\, c)\to \left(\frac{c+a}{2},\, b,\, \frac{c+a}{2}\right)
\end{align*}

これを合成します。
分数が出てくるのを避けるため,あらかじめ  2^6=128 倍した値から操作をはじめると次のようになります。
\begin{align*}
(64x,\, 64y,\, 64y) &\xrightarrow{\ f\ } (32x+32y,\, 32x+32y,\, 64y)\\
&\xrightarrow{\ g\ } (32x+32y,\, 16x+48y,\, 16x+48y)\\
&\xrightarrow{\ h\ } (24x+40y,\, 16x+48y,\, 24x+40y)\\
&\xrightarrow{\ f\ } (20x+44y,\, 40x+44y,\, 24x+40y)\\
&\xrightarrow{\ g\ } (20x+44y,\, 22x+42y,\, 22x+42y)\\
&\xrightarrow{\ h\ } (21x+43y,\, 22x+42y,\, 21x+43y)
\end{align*}

 21x+43y=68.5\times 64=4384,  22x+42y=67\times 64=4288 を解くと  x=4,  y=100
最初にアのコップに入っていた水の量は「 4\,\mathrm{g}」です。

解法2:逆変換を考える

 f,  g,  h の逆変換を考えます。

操作 3 と操作 6 で  h (a,\, b,\, b) (x,\, y,\, x) に移すとします。

 x=(a+b)/2,  y=b より   a=2x-y,  b=y です。
\begin{align*}
h^{-1}: (x,\,y ,\, x)\to (2x-y,\, y,\, y)
\end{align*}

操作 2 と操作 5 で  g (a,\, a,\, b) (x,\, y,\, y) に移すとします。

 x=a,  y=(a+b)/2 より  a=x,  b=2y-x です。
\begin{align*}
g^{-1}: (x,\,y ,\, y)\to (x,\, x,\, 2y-x)
\end{align*}


 f は操作 1 と操作 4 を分けて考えます。それぞれ  f_1,  f_4 であらわします。

 f_1 (a,\, b,\, b) (x,\, x,\, y) に移すとします。

 x=(a+b)/2,  y=b より  a=2x-y,  b=y です。
\begin{align*}
{f_1}^{-1}: (x,\, x,\, y)\to (2x-y,\, y,\, y)
\end{align*}

 f_4 (a,\, b,\, a) x,\, x,\, y) に移すとします。

 x=(a+b)/2,  y=a より  a=y,  b=2x-y です。
\begin{align*}
{f_4}^{-1}: (x,\, x,\, y)\to (y,\, 2x-y,\, y)
\end{align*}

これらを使って  (68.5,\, 67,\, 68.5) からさかのぼると解けます。
\begin{align*}
(68.5,\, 67,\, 68.5) &\xrightarrow{\ h^{-1}\ } (70, 67, 67)\xrightarrow{\ g^{-1}\ } (70, 70, 64))\\
&\xrightarrow{\ {f_4}^{-1}\ } (64, 76, 64)\xrightarrow{\ h^{-1}\ } (52, 76, 76)\\
&\xrightarrow{\ g^{-1}\ } (52, 52, 100)\xrightarrow{\ {f_1}^{-1}\ } (4,\, 100,\, 100)\mbox{ ……(1)}
\end{align*}

解法3:平均からのずれに注目する

一応答えは出ましたが,数値が大きくて計算が面倒なので平均からのずれに注目しましょう。

コップに入っている水は全部で  204\, \mathrm{g} で,3 で割ると  68\, \mathrm{g} です。
 a=68+a' のようにおきます。 f による像は次のようになります。
\begin{align*}
f:(68+a',\, 68+b',\, 68+c')\to \left(68+\frac{a'+b'}{2},\, 68+\frac{a'+b'}{2},\, 68+c'\right)
\end{align*}

これは  (a',\, b',\, c') の像を考えて最後に 68 を足すのと同じです。
\begin{align*}
f:(a',\,b',\, c')\to \left(\frac{a'+b'}{2},\, \frac{a'+b'}{2},\, c'\right)
\end{align*}

 g,  h についても同様なのではじめア,イ,ウに入っていた水の量を  68-128x,  68+64x,  68+64x とおいて  (-128x,\, 64x,\, 64x) の変化を調べます。

各変換において「総和は一定」「1 つの成分は変化しない」を利用すると速いです。

たとえば  f では第 3 成分は変化しないので  (-128x,\, 64x,\, 64x)\to (\square,\, \square,\, 64x) のようになります。
2 つの  \square には同じ数が入って  \square+\square+64x=0 なので  \square=-32x です。
\begin{align*}
(-128x,\, 64x,\, 64x)\xrightarrow{\ f\ } (-32x,\, -32x,\, 64x)
\end{align*}

以下,これの繰り返しです。各変換で変化しない量に下線を引いておきます。
\begin{align*}
(-128x,\, 64x,\, \underline{64x}) &\xrightarrow{\ f\ } (\underline{-32x},\, -32x,\, 64x)\\
&\xrightarrow{\ g\ } (-32x,\, \underline{16x},\, 16x)\\
&\xrightarrow{\ h\ } (-8x,\, 16x,\, \underline{-8x})\\
&\xrightarrow{\ f\ } (\underline{4x},\, 4x,\, -8x)\\
&\xrightarrow{\ g\ } (4x,\, \underline{-2x},\, -2x)\\
&\xrightarrow{\ h\ } (x,\, -2x,\, x)\mbox{ ……(2)}
\end{align*}

 x-(-2x)=3x=68.5-67=1.5 より  x=0.5 がわかります。

はじめアに入っていた水の量は  68-128x=4\, \mathrm{g} です。

解法4:規則性に注目

(1)(2)を見ると最大値  M と最小値  m の差が毎回半分((1)は逆変換なので後ろから見てください)になっていることがわかります。これは簡単に証明できます。

各回の操作では次の 2 つのどちらかがおこります。
\begin{align*}
&\left\{M,\, M,\, m\right\}\to\left\{M,\, \frac{M+m}{2},\, \frac{M+m}{2}\right\}\mbox{ ……(3)}\\
&\left\{M,\, m,\, m\right\}\to\left\{\frac{M+m}{2},\, \frac{M+m}{2},\, m\right\}\mbox{ ……(4)}
\end{align*}

どちらの場合も新しい最大値,最小値の差は  (M-m)/2 です。証明終わり。

6 回の操作で最大値と最小値の差が  68.5-67=1.5 になるのではじめの差は  1.5\times 2^6=96 です。

 \left\{m+96,\, m+96,\, m\right\},  \left\{m+96,\, m,\, m\right\} の総和が 204 になる条件を求めるとそれぞれ  m=4,  m=36 なので最初 3 つのコップに入っていた水の量は次のどちらかです。
\begin{align*}
\left\{100,\, 100,\, 4\right\},\, \left\{132,\, 36,\, 36\right\}
\end{align*}

(3)(4)から各回の操作で「 M が 2 つ」と「 m が 2 つ」が入れ替わることがわかります。
この問題では 6 回の操作で「 M が 2 つ」になるので最初も「 M が 2 つ」で  \left\{100,\, 100,\, 4\right\} です。

「イとウの水の量は同じでアだけは量が異なる」の条件からはじめアのコップに入っていたのは  m にあたる「 4\, \mathrm{g}」だとわかります。

このようにこの解法だとほとんど計算なしで解けますが,この方法で最後まで解ききるのは難しいと思います。平均からのずれに注目する解法が計算量も少なくておすすめです。

おまけ:mathematica で解く

身もふたもない話ですが,自分で解いたときは mathematica を使いました。面倒なことは PC がやってくれるので楽勝でした。

    In[]:= AbsoluteTiming[
        f[{x_, y_, z_}] := {(x + y)/2, (x + y)/2, z};
        g[{x_, y_, z_}] := {x, (y + z)/2, (y + z)/2};
        h[{x_, y_, z_}] := {(z + x)/2, y, (z + x)/2};
        i[{x_, y_, z_}] := h@g@f@{x, y, z};
        eqn = {i@i@{a, b, b} == {137/2, 67, 137/2}};
        sol = Solve[eqn, {a, b}]]
       
    Out[]= {0.0003771, {{a -> 4, b -> 100}}}


variee.hatenablog.com