フィボナッチ数列の項は前の2つの項の和である. 最初の2項を 1, 2 とすれば, 最初の10項は以下の通りである.
#####1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
####数列の項の値が400万以下の, 偶数値の項の総和を求めよ.
Problem1は**こちら**から
2問目にして知らない単語が...フィボナッチ数列とは...
[https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0:title]
ここに書いてること曰く
上の「1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...」で考えるとすると、
1+2で3、2+3で5、3+5で8、5+8で13、8+13で21...
みたいに1つ目の項と2つ目の項を足して、出てきた値を2つ目の項と足して、出てきた値をさっき出てきた値と足して...
文字にすると途端にややこしくなったけど何とかなりそう。
とりえずフィボナッチの条件は
######1.aとbという変数を用意してそれぞれに1と2を代入して
######2.足した値をcという変数に代入して
######3.a = b と b = c としてそれを繰り返す
これでフィボナッチ数列ができているはず。
今のところは終わる条件を指定しないでwhile関数を使ってみる
a = 1
b = 2
while :
c = a + b
a = b
b = c
とかでいいのかと思ったら、
条件なしで無限ループさせるときはwhile True: という物を使うらしいので
a = 1
b = 2
while True:
c = a + b
a = b
b = c
でいいと思う。
確認してみる
a = 1
b = 2
c = 0
while c < 30:
c = a + b
print(c)
a = b
b = c
3,5,8,13,21,34
これでcが30よりも小さいときのみループする文になったのだが...
34が出てきている理由はprint(c)の位置がおかしいからかな
ともかく、フィボナッチ数列をプログラム化できた。
ここにきてやっとProblem2の問題の答えを出す手順を考える
######1.whileの条件式を c が400万以下のときのみループするようにして
######2. c が偶数のときのみ答えとする変数に合算する
これでできるはず。
偶数の時のみ合算するのはProblem1のときみたいにif関数で条件を作ればいいかな
というわけで部分ずつ作っていく
a = 1
b = 2
c = 0
while c < 4000000:
c = a + b
a = b
b = c
これで400万以下に指定して
if c % 2 == 0:
kotae += c
これで c が偶数の時のみkotaeという変数に足していきます。
実行してみる
a = 1
b = 2
c = 0
kotae = 0
while c < 4000000:
c = a + b
a = b
b = c
if c % 2 == 0:
kotae += c
print(kotae)
4613730
当たっているのだろうか
[http://kingyojima.net/pje/002.html:title]
正解は4613732だから間違えているっぽいけど...
2足りないだけだからほぼあっているはず
いろいろ調べてみた結果
######フィボナッチ数列は1+1から始まる
らしい...
ビックリするくらい根本的な問題だったので、b=1にして再計算する
a = 1
b = 1
c = 0
kotae = 0
while c < 4000000:
c = a + b
a = b
b = c
if c % 2 == 0:
kotae += c
print(kotae)
4613732
あってたーー
Problem4は**こちら**から
Problem3はまだ解けていません!! ごめんなさい!