【問題1】 (答え) へいせい        せいれき    9373 + 16 = 7385 + 2004 (解法)   へ=a、い=b、せ=c、い=b、せ=c、い=b、れ=d、き=eとして、与えられた式   を書き直すと     a*1000 + b*100 + c*10 + b + 16 = c*1000 + b*100 + d*10 + e + 2004 ....(1)         ただし、a,b,c,d,e = { 3, 5, 7, 8, 9 } ....(2)   これを整理すると     (a-c)*1000 + 0*100 + (c-d)*10 + (b-e) = 1988 ....(3)   式(3)の1の位を考えると       b-e = 8 ....(4)   or  10+b-e = 8 ....(5)   【case1】 式(4)が成立する場合 式(4)を書き直すと        b = e + 8  ....(6)        次に、百の位を考えると、左辺は、見かけ上0となっているが、右辺は9となっており、     このままでは、式は成立しないので、(c−d) <0でなければならない。     よって、10の位は、        10+(c-d) = 8   ....(7)           即ち、  d = c + 2 ....(8)     最後に、千の位は、百の位へのbollowを考慮して、        (a-c)-1 = 1 ....(9)     即ち、  a = c + 2 ....(10)   (8),(10) より、a=dとなるが、題意a≠dと矛盾するので、解なしとなる。   【case2】 式(5)が成立する場合     式(5)を整理すると        e = b + 2 ....(11)    次に、百の位を考えると、【case1】と同様に、(c−d) - 1<0でなければならない。    (−1は1への位のbollow) よって、10の位は、       10+(c-d)-1 = 8 ....(12)          即ち、  d = c + 1 ....(13)    最後に、千の位は、百の位へのbollowを考慮して、        (a-c)-1 = 1 ....(14)    即ち、  a = c + 2 ....(15)      以上をまとめると、        e = b + 2  ....(11)        d = c + 1 ....(13)        a = c + 2   ....(15)    c、d、aは、連続数であることと、条件式(2)から、c=7、d=8、a=9となる。    すると、残りの数字は、3,5になるので、式(11)より、b=3、e=5となる。    従って、       9373 + 16 = 7385 + 2004 【問題2】 (答え)   Pythonのプログラム(最後に添付)により、平成1年〜20年を探索した結果(最後に添付)より。 【問題2−1】   平成17年以降(n≧17)で次に解けるのはいつでしょう。    ==> 平成18年です。  【問題2−2】    平成15年以前(1≦n≦15)で解けた年を全て求めましょう。    ==> 平成6年以外のすべての年。    そのうち唯一解けた年はいつですか。 ==> 平成4年,平成7年,平成15年です。  【問題2−3】    平成n年は解ける。    これを満たすnはいくつあるでしょう。    あるいは無数存在するでしょうか。    ==> nは無数に存在する。      ∵ 使用できる数字のセット(条件式(2))が変わらないような数を両辺に        加算しても、答えは変わらないので      ex.平成16年の解(9373 + 16 = 7385 + 2004)から           9373 + 10016 = 7385 + 12004           9373 + 110016 = 7385 + 112004           9373 + 1110016 = 7385 + 1112004 といくらでも作れます。  【問題2−4】    問題2−3で“解ける”を“唯一解ける”に変えるとどうでしょう。    ==> やはり、無数に存在します。(上記の例で解そのものは変わらない) ---------------------------------------------------------------------------------------- (問題2の一般解法)   へ=a、い=b、せ=c、い=b、せ=c、い=b、れ=d、き=eとして、与えられた式   を書き直すと     a*1000 + b*100 + c*10 + b + N = c*1000 + b*100 + d*10 + e + M ....(1)       ただし、N = M - 1988           a,c ≠ 0           a,b,c,d,e = {0,1,2,3,4,5,6,7,8,9からN,Mに含まれる数字を除いたもの } ....(2)   これを整理すると     (a-c)*1000 + 0*100 + (c-d)*10 + (b-e) = 1988 ....(3) 式(3)は、【問題1】と同様であるから、a,b,c,d,eには以下の制約条件が必要である。        e = b + 2  ....(11)        d = c + 1 ....(13)        a = c + 2   ....(15)   よって、条件(2),式(11),(13),(15)が成立するa,b,c,d,eの組合せを求めればよい。   手計算では面倒なので、Pythonのプログラムを作ってN=1〜20までを探索した。 -------(探索結果)--------------------------------------------------------- ===== 1 ===== 1 : 4525 + 1 = 2537 + 1989 2 : 5030 + 1 = 3042 + 1989 3 : 6040 + 1 = 4052 + 1989 4 : 7050 + 1 = 5062 + 1989 5 : 7252 + 1 = 5264 + 1989 ===== 2 ===== 1 : 5636 + 2 = 3648 + 1990 2 : 8363 + 2 = 6375 + 1990 ===== 3 ===== 1 : 6040 + 3 = 4052 + 1991 2 : 7050 + 3 = 5062 + 1991 3 : 7252 + 3 = 5264 + 1991 4 : 8060 + 3 = 6072 + 1991 5 : 8262 + 3 = 6274 + 1991 ===== 4 ===== 1 : 8363 + 4 = 6375 + 1992 ===== 5 ===== 1 : 8060 + 5 = 6072 + 1993 2 : 8262 + 5 = 6274 + 1993 ===== 6 ===== ===== 7 ===== 1 : 4626 + 7 = 2638 + 1995 ===== 8 ===== 1 : 4525 + 8 = 2537 + 1996 2 : 5030 + 8 = 3042 + 1996 ===== 9 ===== 1 : 4626 + 9 = 2638 + 1997 2 : 5030 + 9 = 3042 + 1997 3 : 5636 + 9 = 3648 + 1997 4 : 6040 + 9 = 4052 + 1997 ===== 10 ===== 1 : 4525 + 10 = 2537 + 1998 2 : 7252 + 10 = 5264 + 1998 ===== 11 ===== 1 : 4525 + 11 = 2537 + 1999 2 : 4626 + 11 = 2638 + 1999 3 : 5030 + 11 = 3042 + 1999 4 : 5636 + 11 = 3648 + 1999 5 : 6040 + 11 = 4052 + 1999 6 : 7050 + 11 = 5062 + 1999 7 : 7252 + 11 = 5264 + 1999 8 : 8060 + 11 = 6072 + 1999 9 : 8262 + 11 = 6274 + 1999 10 : 8363 + 11 = 6375 + 1999 ===== 12 ===== 1 : 5636 + 12 = 3648 + 2000 2 : 5737 + 12 = 3749 + 2000 3 : 6747 + 12 = 4759 + 2000 4 : 8363 + 12 = 6375 + 2000 5 : 9373 + 12 = 7385 + 2000 6 : 9474 + 12 = 7486 + 2000 ===== 13 ===== 1 : 6747 + 13 = 4759 + 2001 2 : 9474 + 13 = 7486 + 2001 ===== 14 ===== 1 : 8363 + 14 = 6375 + 2002 2 : 9373 + 14 = 7385 + 2002 ===== 15 ===== 1 : 9474 + 15 = 7486 + 2003 ===== 16 ===== 1 : 9373 + 16 = 7385 + 2004 ===== 17 ===== ===== 18 ===== 1 : 5737 + 18 = 3749 + 2006 ===== 19 ===== 1 : 5636 + 19 = 3648 + 2007 ===== 20 ===== 1 : 5737 + 20 = 3749 + 2008 2 : 6141 + 20 = 4153 + 2008 3 : 6747 + 20 = 4759 + 2008 4 : 7151 + 20 = 5163 + 2008 -----(これより、Pythonプログラムソース)-------------------------------- ##### 20004.01.04 # def exe() : out = open("log.txt","w") for y in range(1,21) : WriteLog(out,"\n===== %d =====" % (y)) Solve(y,1988+y,out) out.close() ### def Solve(N,M,out) : Cand = [0,1,2,3,4,5,6,7,8,9] Drop(N,Cand) Drop(M,Cand) m = 0 for c in range(1,8) : a = c + 2 d = c + 1 if (Cand[a] < 0) | (Cand[c] < 0) | (Cand[d] < 0) : continue Cand[a] = -1 Cand[c] = -1 Cand[d] = -1 for b in range(0,8) : e = b + 2 if (Cand[b] < 0) | (Cand[e] < 0) : continue m += 1 Line = " %2d : %d%d%d%d + %2d = %d%d%d%d + %4d" % (m,a,b,c,b,N,c,b,d,e,M) WriteLog(out,Line) Cand[a] = a Cand[c] = c Cand[d] = d ### def Drop(N,Cand) : n = N while n > 0 : m = n % 10 n = n / 10 Cand[m] = -1 ### def WriteLog(out,Line) : print Line out.write(Line+"\n") out.flush() -------(終わり)------------------------------------------------------------------------