Python 系の LINE オプチャにフィボナッチ数列に関する問題が投稿されたので、解いてみました。
解説は書きませんが、何かの参考になれば幸いです。
目次
問題と解答
問題
「フィボナッチ数列」と呼ばれる数列があります。
これは、
「前 2 つの数を足したもの。1 番目と 2 番目は 1 」
というものです。つまり、
1, 1, 2, 3, 5, …(例えば 4 番目の数字 3 は 1 + 2)
となります。このフィボナッチ数列について以下の問いに答えなさい。プログラムについて特に制限はありません。
問1
問 1
フィボナッチ数列を 10 個程度出力してみましょう。
問 1 のコード
fibo = [1, 1]
while len(fibo) < 10:
n = len(fibo)
fibo.append(fibo[n-2] + fibo[n-1])
print(fibo)
これは無数に書き方があるように思いますが、一番しっくりきたものを掲載しておきます。
後ほど Google Colab のリンクも掲載しますが、そちらには他の書き方も載せます。
問2
問 2
数が 50 以下のフィボナッチ数列の合計を出力しなさい。
問 2 のコード
fibo = [1, 1]
while True:
n = len(fibo)
fibo_n = fibo[n-2] + fibo[n-1]
if fibo_n <= 50:
fibo.append(fibo_n)
else:
break
print(f"数が 50 以下のフィボナッチ数列\n{fibo}\n")
print(f"数が 50 以下のフィボナッチ数列の合計\n{sum(fibo)}")
問3
問 3
変数 n を用意し、n 番目までのフィボナッチ数列の合計を表示しなさい。実行するとき n は好きな数を設定してください。
問 3 のコード
n = int(input("nに設定する自然数を入力してください:"))
fibo = [1, 1]
while len(fibo) < n:
m = len(fibo)
fibo.append(fibo[m-2] + fibo[m-1])
print(f"n : {n}\n")
print(f"{n} 番目までのフィボナッチ数列\n{fibo}\n")
print(f"{n} 番目までのフィボナッチ数列の合計\n{sum(fibo)}")
問4
問 4
100 以下のフィボナッチ数列に偶数が何個あるか答えなさい。
問 4 のコード
fibo = [1, 1]
even_fibo = []
while True:
n = len(fibo)
fibo_n = fibo[n-2] + fibo[n-1]
if fibo_n > 100:
break
elif fibo_n % 2 == 0:
even_fibo.append(fibo_n)
fibo.append(fibo_n)
print(f"100以下のフィボナッチ数列\n{fibo}\n")
print(f"100以下のフィボナッチ数列の偶数の値\n{even_fibo}\n")
print(f"100以下のフィボナッチ数列の偶数の値の個数\n{len(even_fibo)}\n")
問5
問 5
30 以下のフィボナッチ数列の平均値を答えなさい。
問 5 のコード
fibo = [1, 1]
while True:
n = len(fibo)
fibo_n = fibo[n-2] + fibo[n-1]
if fibo_n <= 30:
fibo.append(fibo_n)
else:
break
print(f"30以下のフィボナッチ数列\n{fibo}\n")
print(f"30以下のフィボナッチ数列の平均値\n{sum(fibo)/len(fibo)}")
Google Colaboratory
本記事に掲載しているコードは Google Colaboratory で動作を確認しています。
下記リンクからアクセスして、ご自身の Google ドライブにコピーしていただければ、すぐに実行できます。
おわりに
今回は LINE オプチャに投稿されていたフィボナッチ数列に関する問題を解いてみました。
もう少し難しい問題に挑戦したい方は下記記事もフィボナッチ数列に関する問題なので、ぜひ挑戦してみてください。
【Python問題集】No.4 フィボナッチ数列の偶数かつ1000未満の項の和を求める
【問題】フィボナッチ数列の項のうち、偶数かつ1000未満の項を全て足した値を求め、表示させよ。
以上です。
コメント