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

まずは
小手調的な問題
N回何かする的なものは
プログラムは大得意な領域
ABCDEFGHを
EAFBGCHDするということは
整数を文字に直して
インデックスで操作できます。
あとはそれを100回繰り返してやるだけです。
こんな感じのコードにしました。
インデックスと順番は1つズレるので
そこだけ注意ですね
次の問題

さて
これは
組み合わせの問題になりますね。
1,5,10,50円を複数枚
組み合わせて50円にする場合
1円は必ず5枚1セットになるので
for文ではカウンターを5ずつ上げることにしました。
答えは
50円になる組み合わせと
100円になる組み合わせのふた通りを変数に用意する。
こんな感じのコードを書きました。
少し汚いですね・・・・
itertoolsのProduct
なんかを使うとすっきり書けます。
どちらで書いても
実行される結果は一緒になります。
ネストされる階層が深すぎると
見づらくなるので
まとめてしまうのもアリです。
今回はここまで
ではまた。
乙pyです。
暇なので受験シーズンだし
有名中学の算数の問題をプログラムで解けないかと
思ったりしたわけですね。
インターネットの
Googleで調べたんですが
そこで問題が難しそうな学校を見つけてしまったんですね。
皆さん
難しい中学校って知ってます?
自分は近所の中学校に行ったので
知らないんですけど
問題を解いてみたんですねー
というものの第五弾です。
動画解説はこちら
始めの問題

まずは
小手調的な問題
N回何かする的なものは
プログラムは大得意な領域
ABCDEFGHを
EAFBGCHDするということは
整数を文字に直して
インデックスで操作できます。
あとはそれを100回繰り返してやるだけです。
こんな感じのコードにしました。
a = '12345678'
answer = ''
for i in range(100):
a = a[4]+a[0]+a[5]+a[1]+a[6]+a[2]+a[7]+a[3]
answer = a
print(answer)インデックスと順番は1つズレるので
そこだけ注意ですね
次の問題

さて
これは
組み合わせの問題になりますね。
1,5,10,50円を複数枚
組み合わせて50円にする場合
1円は必ず5枚1セットになるので
for文ではカウンターを5ずつ上げることにしました。
答えは
50円になる組み合わせと
100円になる組み合わせのふた通りを変数に用意する。
こんな感じのコードを書きました。
ans50 = []
ans100 = []
for i1 in range(0,101,5):
for i5 in range(0,21):
for i10 in range(0,11):
for i50 in range(0,3):
if (i1+i5*5+i10*10+i50*50)==50:
ans50.append((i1,i5,i10,i50))
if (i1+i5*5+i10*10+i50*50)==100:
ans100.append((i1,i5,i10,i50))
4重ループは少し汚いですね・・・・
itertoolsのProduct
なんかを使うとすっきり書けます。
from itertools import product
ans50,ans100 = [],[]
for i1 , i5 , i10 , i50 in product(range(0,101,5),range(0,21),range(0,11),range(0,3)):
if (i1+i5*5+i10*10+i50*50)==50:
ans50.append((i1,i5,i10,i50))
if (i1+i5*5+i10*10+i50*50)==100:
ans100.append((i1,i5,i10,i50))
print(len(ans50))
print(len(ans100))
どちらで書いても
実行される結果は一緒になります。
ネストされる階層が深すぎると
見づらくなるので
まとめてしまうのもアリです。
今回はここまで
ではまた。




