はいどーもー
乙pyです。

暇なので受験シーズンだし
有名中学の算数の問題をプログラムで解けないかと
思ったりしたわけですね。

インターネットの
Googleで調べたんですが
そこで問題が難しそうな学校を見つけてしまったんですね。

皆さん

難しい中学校って知ってます?

自分は近所の中学校に行ったので
知らないんですけど
問題を解いてみたんですねー

というものの第八弾です。


動画解説はこちら



始めの問題
有名中学の入試問題.014


これも一瞬で解けます。
for i in range(1,20):
    st = '2' + '0'*i +'7'
    if int(st)%27==0 and int(st)%81!=0:
        print(st)
        break
先頭が2で末尾が7、間が0という
条件を充しつつ
27で割り切れて、81で割り切れないというものが
1つでも見つかった時点で
プログラムは終了です。

条件の書き方もそこまで難しくはないと思います。


次の問題は
有名中学の入試問題.013

まずは図を把握しろという
難問でした。

図のルールがわかれば
プログラムに落とし込むのは容易です。

要は日本語の問題ですね。
きちんと仕様を理解するというのが
問題のポイント(笑)です。

1のコードは
num = [1,2,3,4,5,6,7,8,9,10,11,12]
q1 = []
for i in range(1,6):
    q1 = num
    num = [num[0],num[6],num[1],num[7],num[2],num[8],num[3],num[9],num[4],num[10],num[5],num[11]]
print(q1)

1回目は入れ替えが起きないので
入れ替えが始まるのは2回目からですね

その分を考慮する必要があります。

一旦数字の並びは
リストに格納し、その並びを求めることとしました。

2のコードは
num  = [1,2,3,4,5,6,7,8,9,10,11,12]
num1 = [1,2,3,4,5,6,7,8,9,10,11,12]
q2 = 1
for i in range(1,13):
    q2 +=1
    print(i,num)
    num = [num[0],num[6],num[1],num[7],num[2],num[8],num[3],num[9],num[4],num[10],num[5],num[11]]
    if num == num1:
        print(q2)
        break

元の数値の並びを置いておき
入れ替えをするものと並びを比較してあげるだけの
シンプルなコードです。

12個しか数字がないので
元と同じになるのに
12回以上は入れ替えが起きないだろうと
試行回数は減らしています。

3のコードは
num = [1,2,3,4,5,6,7,8,9,10,11,12]

for i in range(2006-1):
    num = [num[0],num[6],num[1],num[7],num[2],num[8],num[3],num[9],num[4],num[10],num[5],num[11]]
print(num)

単にその回数実行してあげるだけ
ただし、その回数には注意が必要ですね。


図で考えると
すごく難しそう

でもプログラムはシンプル

そんな問題でした。

この問題の図を作るのに
一番時間が掛かるという・・・・

解くのは一瞬