数学パズル
先日、イベントで家族と大学へ遊びに行った。数学科のブースでは、例年のごとく算数の問題が幾つか出されている。その一つをマクロで解くことに挑戦した。
【問 題】
整数x,y,zの取りうる組合せ数を答えなさい。
条件1.x,y,zは自然数である。
条件2.x<y<zである。
条件3.x+xy+xyz=31
ローラー作戦で解いてみた。足し算の結果が31なので、とりあえず31までループすれば、間違いないだろう。
Sub Abe_Shi() Dim x As Long Dim y As Long Dim z As Long For x = 1 To 31 For y = 1 To 31 For z = 1 To 31 If x + x * y + x * y * z = 31 Then If x < y And y < z Then Debug.Print "x=" & x & ", y=" & y & ", z=" & z End If End If Next Next Next End Sub
結果は、以下のとおり。
正解が出た。うむ、実に味気ない。
ちなみに、まじめにやるとこうなる。
x+xy+xyz=x(1+y+yz)=31
〇×△=31となる掛け算は、1×31しか存在しない。
従って、x=1が確定する。
1+y+yz=31
y(1+z)=30
掛け算で30になるのは、以下の4とおり。
- 1×30 ⇒ x=y=1となってNG
- 2×15 ⇒ y=2,z=15-1=14
- 3×10 ⇒ y=3,z=10-1=9
- 5×6 ⇒ y=z=5となってNG
以上のことから、組合せは
- x=1,y=2,z=14
- x=1,y=3,x=9
の2とおりとなる。
どちらの方法で解くかは、皆さんのお好みにお任せします。
参考まで。