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

これは初学者の方々には難しいかもしれませんが
順列の問題です。
4つの異なる数字1 ,3 , [ ] ,9
この中から3つの数字を取り出して並べてできる
3桁の整数
これは4P3で24通りあるんですね。
この順列の求め方は実は
pythonだと非常に簡単に出来るんです。
まずはitertoolsをインポートします。
このitertoolsを用いると
組み合わせや順列の結果を全部計算してくれます。
さてこの問題の場合は
4つの数値のうち、3つは固定されています。
あとは残る数値を変化させるようにして
試行していけば良いわけです。
なので試行する数値をリストに格納して
for文を書くということになります。
for x in [0,2,4,5,6,7,8]:
さて、順列の方ですが
itertools.permutations(リスト, 個数)
で作ることができます。
なのでfor文で送られる数値を使って
順列の元になる4つの数値を変数に格納します。
あとはこれを用いて順列を作ります。
次に
このライブラリを使って求められるものは
順列の結果が24個入ったリストが帰ってきます。
これはそのままでは3桁の整数になっていないので
この順列24個を3桁の数値に直します。
数値を文字にして連結して
また数値に戻すで3桁の数値にできます。
それを24回やって、一時的にリストに格納します。
問題の条件は平均が555ということなので
このリストに格納した3桁の整数を全部足しあわせたのを
個数24で割ってあげます。
この平均が555であれば
答えということになります。
プログラムはこうなりました。
順列、文字列操作、数値変換、平均を求めるなど
プログラムでの基本的な操作が
色々と組み合わさるので
プログラミング学習には良い問題ですね
お次は

問題が細かいですが
4桁の整数で条件に合うものが何個有るかを求めるという問題です。
ただし
100の位は0で固定なので
試行するのは千の位、10の位、1の位に絞られます。
次の条件は
10と1の位がひっくり返ってもそれぞれ
7で割れるというものです。
これは数字を文字に置き換えてあげることで
解くことができます。
4桁の整数と
その10の位と1の位がひっくり返ったものの
両方が7で割り切れれば条件に合致します。
という風にして、試行した分の結果を
リストに格納して、その個数が
回答になります。
プログラムだとこうなりました。
文字列と数値の使い方は
プログラミングの基本のため
こういった問題を解くことで
プログラミングの基本が身について行くと思います。
乙pyです。
暇なので受験シーズンだし
有名中学の算数の問題をプログラムで解けないかと
思ったりしたわけですね。
インターネットの
Googleで調べたんですが
そこで問題が難しそうな学校を見つけてしまったんですね。
皆さん
難しい中学校って知ってます?
自分は近所の中学校に行ったので
知らないんですけど
問題を解いてみたんですねー
というものの第二弾です。
動画解説はこちら
初めの問題は

これは初学者の方々には難しいかもしれませんが
順列の問題です。
4つの異なる数字1 ,3 , [ ] ,9
この中から3つの数字を取り出して並べてできる
3桁の整数
これは4P3で24通りあるんですね。
この順列の求め方は実は
pythonだと非常に簡単に出来るんです。
まずはitertoolsをインポートします。
import itertools
このitertoolsを用いると
組み合わせや順列の結果を全部計算してくれます。
さてこの問題の場合は
4つの数値のうち、3つは固定されています。
あとは残る数値を変化させるようにして
試行していけば良いわけです。
なので試行する数値をリストに格納して
for文を書くということになります。
for x in [0,2,4,5,6,7,8]:
さて、順列の方ですが
itertools.permutations(リスト, 個数)
で作ることができます。
なのでfor文で送られる数値を使って
順列の元になる4つの数値を変数に格納します。
あとはこれを用いて順列を作ります。
次に
このライブラリを使って求められるものは
順列の結果が24個入ったリストが帰ってきます。
これはそのままでは3桁の整数になっていないので
この順列24個を3桁の数値に直します。
数値を文字にして連結して
また数値に戻すで3桁の数値にできます。
それを24回やって、一時的にリストに格納します。
問題の条件は平均が555ということなので
このリストに格納した3桁の整数を全部足しあわせたのを
個数24で割ってあげます。
この平均が555であれば
答えということになります。
プログラムはこうなりました。
for x in [0,2,4,5,6,7,8]:
seq = (1,3,9,x)
lis = []
for i in list(itertools.permutations(seq,3)):
s = int(''.join([str(i[0]),str(i[1]),str(i[2])]))
lis.append(s)
if sum(lis)//len(lis) == 555:
print(x)
break順列、文字列操作、数値変換、平均を求めるなど
プログラムでの基本的な操作が
色々と組み合わさるので
プログラミング学習には良い問題ですね
お次は

問題が細かいですが
4桁の整数で条件に合うものが何個有るかを求めるという問題です。
ただし
100の位は0で固定なので
試行するのは千の位、10の位、1の位に絞られます。
次の条件は
10と1の位がひっくり返ってもそれぞれ
7で割れるというものです。
これは数字を文字に置き換えてあげることで
解くことができます。
4桁の整数と
その10の位と1の位がひっくり返ったものの
両方が7で割り切れれば条件に合致します。
という風にして、試行した分の結果を
リストに格納して、その個数が
回答になります。
プログラムだとこうなりました。
r = []
for x in range(1,10): # 1000の位
for y in range(10): # 10の位
for z in range(10): # 1の位
a = '{x}0{y}{z}'.format(x=x,y=y,z=z)
b = '{x}0{z}{y}'.format(x=x,y=y,z=z)
if int(a)%7==0 and int(b)%7==0:
r.append((a,b))
print(len(r))
文字列と数値の使い方は
プログラミングの基本のため
こういった問題を解くことで
プログラミングの基本が身について行くと思います。

コメントする