【MAC上学習C++】Day 14-1.練習問題6-4関数を用いて指定範囲内のFibonacci数(20点)を出力する
1938 ワード
練習問題6-4関数を用いて指定範囲内のFibonacci数(20点)を出力する
1.タイトルの抜粋
https://pintia.cn/problem-sets/12/problems/311
2.テーマ内容
本題では、
関数インタフェースの定義:
int fib(int n);void PrintFN(int m,int n);関数
サンプル1を入力:
出力サンプル1:
入力サンプル2:
出力サンプル2:
3.ソース参照
1.タイトルの抜粋
https://pintia.cn/problem-sets/12/problems/311
2.テーマ内容
本題では、
Fibonacci
の数を計算する単純な関数を実現し、それを利用して別の関数を実現し、2つの正の整数m
とn
(0 Fibonacci数)を出力することが要求される.Fibonacci
の数列とは、いずれかの数が前の2つの数の和(最初の2つが1
と定義されている)を満たす数列である.関数インタフェースの定義:
int fib(int n);void PrintFN(int m,int n);関数
fib
は第n
項Fibonacci
数を返さなければならない;関数PrintFN
は1行に所定範囲[m,n]内のすべてのFibonacci
数を出力し、隣接する数字の間に1つのスペースがあり、行末に多くのスペースがあってはならない.所定の区間内にFibonacci
数がなければ、1行No Fibonacci number
を出力する.サンプル1を入力:
20 100 7
出力サンプル1:
fib(7) = 13
21 34 55 89
入力サンプル2:
2000 2500 8
出力サンプル2:
fib(8) = 21
No Fibonacci number
3.ソース参照
#include
using namespace std;
int fib(int n);
void PrintFN(int m, int n);
int main()
{
int m, n, t;
cin >> m >> n >> t;
cout << "fib(" << t << ") = " << fib(t) << endl;
PrintFN(m, n);
return 0;
}
int fib(int n)
{
if ((n == 1) || (n == 2))
{
return 1;
}
else
{
return fib(n - 1) + fib(n - 2);
}
}
void PrintFN(int m, int n)
{
int cnt = 0;
for (int i = 1; ; i++)
{
if (fib(i) > n)
{
if (cnt > 0)
{
cout << endl;
}
break;
}
if ((fib(i) >= m) && (fib(i) <= n))
{
if (cnt > 0)
{
cout << " ";
}
cout << fib(i);
cnt++;
}
}
if (cnt == 0)
{
cout << "No Fibonacci number" << endl;
}
return;
}