Project Euler Problem11~15(Python)
自分なりの解答と考え方を載せていきます。
少し雑なのでコメントしてくれれば詳しく載せます。
ミスやアドバイスもコメントお願いします!!
Problem 11 「格子内の最大の積」
縦 横 斜め右 斜め左の4パターンを計算して、その中で一番でかいやつを答えにした。注意した点は斜めの書き方と範囲ですね。配列の考え方は下図に貼ります(ipadアプリを使ってみました)
問題の格子をどのようにして配列に入れるかが最初一番わからなかったです(笑)
Answer: 70600674
Problem 12 「高度整除三角数」
三角数は下図のように1,2,3と加算される数です。なぜ三角数というかは形を見てもらえば理解できると思います。余談ですが四角数、五角数などもあります。
Answer: 76576500
Problem 13 「大きな数の足し算」
私がpythonが不慣れというのもあり、最後の結果をきれいに出す方法がわからず強引に答えを出してます。ただすべてを足し、その合計を出して上十桁をコピーするだけです。(笑)
Answer: 5537376230
Problem 14 「最長のコラッツ数列」
初期値から1に至るまでの最長の数列ですね。設定を見る限り初期値が奇数であることが予想できます。というのも奇数の場合初期値より大きくなる可能性があるからです。(問題文の13→40にあるように)
それを踏まえて1に至るまで網羅的に計算していきます。
Answer: 837799
Problem 15 「格子経路」
これはまず前提として格子経路のルートの数を求める方法を知っていると有利な気がします。詳しいことは調べると出るのですが結論から言うとCombinationを使います。
40C20を求めると答えになります。この先使うことが有るかもしれないのでCombinationの関数を作っておきました。(Pythonのライブラリでもしかしたらあるかもしれないから作る必要ないかも笑)
Answer: 137846528820