乙pyです。
暇なので受験シーズンだし
有名中学の算数の問題をプログラムで解けないかと
思ったりしたわけですね。
インターネットの
Googleで調べたんですが
そこで問題が難しそうな学校を見つけてしまったんですね。
皆さん
難しい中学校って知ってます?
自分は近所の中学校に行ったので
知らないんですけど
問題を解いてみたんですねー
というものの第三弾です。
動画解説はこちら
さて最初の問題は

2桁と4桁の整数同士の結果を問う問題なので
試行回数が増えますね。
変数a と x の2重ループになるという考えで進みました。
整数aとxをかけると119868
整数aの10と1の位を0に置き換えたものを
変数bすると
求める数の条件は
a * x == 119868
かつ
b * x == 117600
になりますね。
あとは複数出たaの中から
最大の整数を求めれば終了です。
答えは次のようなプログラムになりました。
r = [] for a in range(1000,10000): for x in range(10,100): b = int(str(a)[0:2] +'00') if a * x == 119868 and b * x == 117600: r.append(a) print(a,x) print(max(r))
お次の問題は

数字の穴埋め問題ですね
さて
整数ABCDEF に6をかけると
整数DEFABC になるという問題
普通に解くなら少しづつ試す感じになりますが
プログラムは力技で解いていきます。
6桁分の整数を全部条件に当てはめて解いてみます。
for i in range(100000,1000000):
そして
その変数 i を6桁のABCDEFと仮定して
それに6をかけてDEFABCになれば
正解が導き出せるわけです。
数値文字列にして、インデックスで各桁の数値を
変数a,b,c,d,e,fに置き換えます。
あとは条件に当てはまるかを
if文で書くだけです。
ABCDEFを求めるプログラムはこうなりました。
for i in range(100000,1000000): x =str(i) a,b,c,d,e,f = x[0],x[1],x[2],x[3],x[4],x[5] if i*6==int(d+e+f+a+b+c): print(x) break
DEFは末尾3桁をとれば良いですね。
プログラムで解く際には
試行回数が少ない方が効率が良いので
いかに試行回数を減らすことができるかも
ポイントになりますが
今回は力技でした。