◆東京都 ぽこぺん さんからの解答
【問題1】
[ 7: 5回] C4+4+4/4+4=
[ 17: 5回] C4*4*4+4/4=
[ 27: 7回] C4+4*4-4*4-4/4=
[ 37: 7回] C4+4*4*4+4/4+4=
[ 47: 7回] C4+4+4*4*4-4/4=
[ 57: 8回] C4*4*4-4-4*4+4/4=
[ 67: 7回] C4*4*4*4-4/4+4=
[ 77: 8回] C4*4+4*4-4*4+4/4=
[ 87: 9回] C4*4+4*4*4-4/4+4+4=
[ 97: 8回] C4*4+4+4*4*4+4/4=
【問題2】
以下で,文字はすべて整数とします。
表示させる数を qn+r (0<r<n) とするとき,
n から qn+r に達するときの最小演算回数
([n]キーを押す回数)
を f(n) とします。
f(n)=1 です。
この過程は,ある適当な a(a≧0)に対して,
[1]
(1-1)
rn (1≦r≦n)については,
nを作るには“C n”(1回)
n2 を作るには“C n * n”(2回)
であり,その間の数に関しては
n → 2n → … → rn ← … ← (n-1)n ← n2 1 2 (+ n) (- n) 3 2のように両方向から近づくときの最小な方を選べばよいから
f(rn) = r (r≦[n+2/2] のとき)
= n-r+2 (r>[n+2/2] のとき)となります。
(1-2)
それ以降は,長さ n2 の区間ごとに,区間の上限での値を
f(kn2) = f(kn)+1 (k=2,3,…)
(演算は“* n”を追加)
によって定め,途中の値を
(k-1)n2 → (k-1)n2+n → …
→ (k-1)n2+rn ← … ← kn2-n ← kn2
(演算は→のとき“+ n”を追加,←のとき“- n”を追加)
のように両方向から近づくときの最小な方として選びます。
[2][3]は両方を合わせて次のように求めます。
まず
g(kn+r) = f(n(kn+r))+1 (k=0,1,…)
(演算は“/ n”を追加することに対応)
により,[2]だけを使って求めた値 g(kn+r) を作ります。
次に,f(r) = g(r)とし,k=1,2,3,… に対して
f(kn+r) = f((k-1)n+r)+1 (f((k-1)n+r)+1 ≦ g(kn+r))
= g(kn+r) (f((k-1)n+r)+1 > g(kn+r))
により下から n ずつ増やして近づくときの最小値 f(kn+r) の値を仮に定めます。
第1の式を選んだとき,演算は (k-1)n+r に対する演算に“+ n”を追加します。
第2の式を選んだときには,n(kn+r) に対する演算に“/ n”を追加します。
最後に,各 k に対して f(kn+r) と f((k-1)n+r) とを比較して,
f((k-1)n+r) > f(kn+r)+1
であれば,上から n ずつ減らして近づく方が操作が短いということだから,
f((k-1)n+r)の値を f((k-1)n+r) = f(kn+r)+1 により修正し,その結果を同様に下に伝播させます。
このとき演算は,上の演算結果に“- n”を追加します。
以上で最小演算回数とそれを与える演算の内容が求まりました。
【感想・その他】
操作過程を表現する方法を見つけるまでの試行錯誤に一番時間がかかりました。
32 ↑ 4→8→12→16 | | 24→28 ↓ ↑ 2→6→10などとやっていくうちにだんだん余白が狭くなり,別の紙に書き直したりと, 最終的に Excel で表現する形式を見つけるまでに相当苦労しました。
●n=4の結果,n=9の結果(Excel)
◆山梨県 Footmark さんからの解答
4を足しても4を引いても4を掛けても、必ず4の倍数である。
よって、4の倍数でない数を作成するには、1回は4で割らなければならない。
一般に、唯一許される数字キーを[n]とすると、
【キー操作】C n(□n…□n) ×n×…×n ±n±…±n ÷n ±n±…±n =
【nの回数】 p回 k回 r回 1回 q回
のようにキー操作をすると、数値(p'nk±qn±r)が作成される。
このとき、[n]を叩く回数は(p+k+q+r+1)回である。
ただし、□は最後は必ず+である+または×である。
当然のことだが、r個の演算子もq個の演算子も、どちらもそれぞれ同一である。
このとき、p,k,q,rは、それぞれ数値(p'n),(nk),(qn),(r)を作成するnの使用回数である。
それ故、作成する数を(p'nk±qn±r)の形で表したとき、
p+k+q+r が最小になる表し方を求めればよいことになる。
例えば、唯一許される数字キーが[9]のとき、55を作成するには[9]を叩く回数は、
55=6×91+1 とすると C9+9+9+9+9+9×9+9÷9= の9回だが、
55=1×92ー3×9+1 とすると C9×9×9+9÷9−9−9−9= の8回で済む。
結局、本問における求めるキー操作は以下となる。
ただし、キーを叩く回数=2([4]を叩く回数)+1=2(p+k+q+r+1)+1
| 作成数 | キー操作 | [4]を叩く回数(p+k+q+r+1) |
| 7=2*41 ー1 | C4+4×4ー4÷4= | 2+1+0+1+1=5 |
| 17=1*42 +1 | C4x4x4+4÷4= | 1+2+0+1+1=5 |
| 27=2*42ー1*4ー1 | C4+4×4×4−4÷4−4= | 2+2+1+1+1=7 |
| 37=2*42+1*4+1 | C4+4×4x4+4÷4+4= | 2+2+1+1+1=7 |
| 47=3*42 −1 | C4+4+4x4×4ー4÷4= | 3+2+0+1+1=7 |
| 57=1*43ー2*4+1 | C4×4×4×4+4÷4−4−4= | 1+3+2+1+1=8 |
| 67=1*43+1*4ー1 | C4×4×4x4ー4÷4+4= | 1+3+1+1+1=7 |
| 77=5*42ー1*4+1 | C4×4+4×4×4+4÷4ー4= | 3+2+1+1+1=8 |
| 87=5*42+2*4ー1 | C4×4+4×4×4ー4÷4+4+4= | 3+2+2+1+1=9 |
| 97=6*42 +1 | C4×4+4+4×4×4+4÷4= | 4+2+0+1+1=8 |
◆東京都 明 さんからの解答
【問題1】
NUMBER = 7
C4+4*4-4/4=7
C4*4-4/4+4=7
C4+4+4/4+4=7
たたいた回数: 5
NUMBER = 17
C4*4*4+4/4=17
C4/4/4+4*4=17
たたいた回数: 5
NUMBER = 27
C4+4*4*4-4/4-4=27
C4+4*4-4*4-4/4=27
たたいた回数: 7
NUMBER = 37
C4+4*4+4*4+4/4=37
C4+4*4*4+4/4+4=37
C4/4/4+4+4*4+4=37
C4/4+4/4+4+4*4=37
たたいた回数: 7
NUMBER = 47
C4*4-4*4*4-4/4=47
C4+4+4*4*4-4/4=47
たたいた回数: 7
NUMBER = 57
C4*4*4*4+4/4-4-4=57
C4*4*4-4*4+4/4-4=57
C4*4*4-4-4*4+4/4=57
たたいた回数: 8
NUMBER = 67
C4*4*4+4*4-4/4=67
C4*4*4*4-4/4+4=67
たたいた回数: 7
NUMBER = 77
C4*4+4*4*4+4/4-4=77
C4*4+4*4-4*4+4/4=77
たたいた回数: 8
NUMBER = 87
C4*4+4*4+4+4*4-4/4=87
C4*4+4*4+4*4-4/4+4=87
C4*4+4*4*4-4/4+4+4=87
たたいた回数: 9
NUMBER = 97
C4*4+4+4*4*4+4/4=97
たたいた回数: 8
【問題2】
唯一の数字キーを[n]としたとき、nと*,/,+,-をたたいた結果を展開してnの冪で整理すると、結果が整数の場合は以下のようになります。
N(k)*nk+N(k-1)*nK-2+・・・+N(2)*n+N(1) (1式)
(ただしN(j)は整数)
逆にこの式を題意の電卓で実現するためには以下のようになります。
n(N(k)回),*,n,n(N(k-1)回),*,n,・・・・・,
n(N(2)回),*,n,n(N(1)回),/,n (2式)
ただし、n(N回)はnをN回加算(Nが正)もしくは減算(Nが負)することを示します。
Nが0のときは何もしません。
この時nをたたく回数は
|N(k)|+|N(k-1|+・・+|N(1)|+k (3式) となります。
この回数を最小にすることを考えます。
ところで1式でN(3)以上の項がない場合は(2式)は
n(N(1)回),/,n,n(N(2)回)で実現した方が回数が1回少なくて済みます。
したがって1式は実現数≧n2+1 のときの一般式となります。
実現数≧n2+1 の時、
実現数を作るのに、nをたたく回数を最小で済ますためには
-(n-1) ≦N(j)≦n-1 (ただし最上位N(K)は常に正)
の範囲で3式を最小にするものを見つけることになります。
まず、n進数表示をつくります。
次に下の桁から順に
| nが偶数のとき|N(j)|≧ | n 2 | +1、nが奇数のとき|N(j)|≧ | n+1 2 |
の場合、 |
この時、該当桁が1つ以上(nが奇数の時。偶数の場合は2つ以上)減って、桁上げで1つ増加。
ただし、最上位の場合、新しい桁ができるので桁上げでは2つ増加します。
したがってnが奇数の時は最上位桁が
| n+1 2 |
となる時は補数をとらないようにします。(手順2) |
次にnが偶数の場合は、下の桁から順にチェックし、
N(j)=n/2の桁があるとき、すぐ上の桁が負の場合、桁上げをして補数をとることにより、桁上げで1つ減少させることができます。
また、n/2の桁が2桁続く時はそれぞれの桁を桁上げして補数をとることにより回数は変わりませんが、桁上げがされ、上の桁で回数を
減少させるチャンスができます。
ただし連続した桁の先頭が最上位の場合は新しい桁ができるため、桁上げで回数が増加してしまうので操作をしません。
(手順3)
手順3の後、上の桁へ手順2,手順3を適用することにより、回数を減少させることができます。
実現数≦n2-1 の時、
n(N(1)回),/,n,n(N(2)回)と
n(N(3)回),*,n,n(N(2)回),*,n,n(N(1)回),/,n (N(3)=1または0)
を比較して少ない方を採用します。
特に実現数=n2-1 の時は、
n*n*n-n/n が最小回数になります。(n≧3のとき)
アルゴリズムの確認用に10進BASICでプログラムを作って
n2+1以上の場合のテストをしてみました。
◆愛知県 Y.M.Ojisan さんからの解答
【問題1】
| 数値 | キー操作 | 回数 |
| 7 | C4+4*4-4/4=7 | 5 |
| 17 | C4*4*4+4/4=17 | 5 |
| 27 | C4+4*4-4*4-4/4=27 | 7 |
| 37 | C4+4*4+4*4+4/4=37 | 7 |
| 47 | C4*4-4*4*4-4/4=47 | 7 |
| 57 | C4*4*4*4+4/4-4-4=57 | 8 |
| 67 | C4*4*4+4*4-4/4=67 | 7 |
| 77 | C4*4+4*4-4*4+4/4=77 | 8 |
| 87 | C4*4+4*4+4+4*4-4/4=87 | 9 |
| 97 | C4*4+4+4*4*4+4/4=97 | 8 |
【問題2】
基本的にはn進数に表わして、各桁に対してはその値分nを加算ないし減算し、最後にnで割る方法が考えられます。
ただし、各桁の数値は通常の0〜n−1ではなく、
| - | n 2 | 〜 | n 2 |
で考えます。 |
<作成手順>
| ただし、各桁の数値は- | n-1 2 | 〜 | n-1 2 |
を用いる。 |
| 1の位が- | n-1 2 | の場合は特別に1の位を | n-1 2 |
にし、 |
| 次の位が- | n-1 2 | の場合は特別に最上位を0とし、 |
| 次の位を | n+1 2 |
にする。 |
◆ 問題へもどる
◆ 今週の問題へ