「ベトナムの8歳向け算数問題」をpythonで解いてみました。(^_^;
8歳の算数だから割り算の結果が小数や分数になるのは除いてみましたが、それでも答えは複数あるようです。(^_^;
ちなみに、途中に小数や分数が含まれていいなら答えはもっとたくさんあるようです。(^_^;
● mathsPuzzle4v8yo.py
# coding: UTF-8 # mathsPuzzle4v8yo.py import itertools for p in itertools.permutations(range(1,10)): s = "%d+13*%d/%d.0+%d+12*%d-%d-11+%d*%d/%d.0-10==66"%p a,b,c,d,e,f,g,h,i = p if 13*b/c!=13.0*b/c: continue # 割り算が小数や分数になるものを除外 if g*h/i!=1.0*g*h/i: continue # 〃 if eval(s): print s.replace('.0','')
●実行結果
3+13*2/1+5+12*4-7-11+8*9/6-10==66 3+13*2/1+5+12*4-7-11+9*8/6-10==66 5+13*2/1+3+12*4-7-11+8*9/6-10==66 5+13*2/1+3+12*4-7-11+9*8/6-10==66 5+13*3/1+7+12*2-6-11+8*9/4-10==66 5+13*3/1+7+12*2-6-11+9*8/4-10==66 5+13*4/1+9+12*2-7-11+3*8/6-10==66 5+13*4/1+9+12*2-7-11+8*3/6-10==66 5+13*9/3+6+12*2-1-11+7*8/4-10==66 5+13*9/3+6+12*2-1-11+8*7/4-10==66 6+13*3/1+9+12*2-5-11+7*8/4-10==66 6+13*3/1+9+12*2-5-11+8*7/4-10==66 6+13*9/3+5+12*2-1-11+7*8/4-10==66 6+13*9/3+5+12*2-1-11+8*7/4-10==66 7+13*3/1+5+12*2-6-11+8*9/4-10==66 7+13*3/1+5+12*2-6-11+9*8/4-10==66 9+13*3/1+6+12*2-5-11+7*8/4-10==66 9+13*3/1+6+12*2-5-11+8*7/4-10==66 9+13*4/1+5+12*2-7-11+3*8/6-10==66 9+13*4/1+5+12*2-7-11+8*3/6-10==66
P.S.
最近はPCが速くなったのであまり気になりませんが、eval()の遅さが気になるならeval()抜きで作ると次のようになります。
● mathsPuzzle4v8yo1.py
# coding: UTF-8 # mathsPuzzle4v8yo1.py import itertools s = '%d+13*%d/%d+%d+12*%d-%d-11+%d*%d/%d-10==66' for p in itertools.permutations(range(1,10)): a,b,c,d,e,f,g,h,i = p if 13*b/c!=13.0*b/c: continue if g*h/i!=1.0*g*h/i: continue if a+13.0*b/c+d+12*e-f-11+1.0*g*h/i-10==66: print s%p
- 作者: 辻真吾
- 出版社/メーカー: 技術評論社
- 発売日: 2010/04/24
- メディア: 大型本
- 購入: 19人 クリック: 199回
- この商品を含むブログ (59件) を見る