看到这道题时,斐波那契数组的基因已经开始颤抖了吧,
第一部分:准备工作
此时,开始第一部分:
可以先打出一个基础求斐波那契数列求第n项的代码:
#include <iostream>
using namespace std;
int main()
{
int n, a = 1, b = 1, sum = 0, i;
cin >> n;
if (n <= 2)
{
cout << "1" << endl;
}
else
{
for (i = 2; i < n; i++)
{
sum = a + b;
a = b;
b = sum;
}
cout << sum << endl;
}
return 0;
}
接下来,只需对其进行微调,即可完成 “ 小杨做题 ”
首先:输入的a,b,n,m,c
a,是斐波那契数列第一个数
b,是斐波那契数列第二个数
n,是数列长度,也就是范围
m,是判定数列的和
经过分析,小杨既然每天写前两天的和,那么他前几天写的,那就正是规定天数写的数量。
那么我们定义一个 “ ans ”,为第三个数,也就是每次判定小杨作业之和的变量。
那么,便可以完成程序的第一部分:
int a, b, n, m, c;
int ans;
cin >> a >> b >> m >> n;
ans = a + b;
第二部分:斐波那契数列的循环
已经有了这些变量,开始第二部分:斐波那契数列的循环
这一部分没有什么强调的,一个循环,第一个变量第二个变量的轮流切换,再加上题目已给出的判定是否 " 大于等于m " 就可以完成第二部分:
for (int i = 3; i <= n; i++)
{
c = a + b;
ans += c;
a = b;
b = c;
if (c >= m)
{
break;
}
}
第三部分:特殊情况的处理
记得吗,在斐波那契数列中,有对非常不规则的兄弟俩,“ 1 ”,“ 1 ”这对数正是数组的前两个数,这俩中的第二个“ 1 ”甚至是斐波那契随便安排的一个数,毕竟因为这第二个数看前面只有一个数,看后面,还有无数个数等着它呢。
那么,第一个数和第二个数便需要特殊处理,用两个if判断,便可以完成:
if (n == 1)
{
ans = a;
}
if (n == 2)
{
ans = a + b;
}
第四部分:完整程序
当然,有始有终,别忘了输出,最后的代码是这样的:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a, b, n, m, c;
int ans;
cin >> a >> b >> m >> n;
ans = a + b;
for (int i = 3; i <= n; i++)
{
c = a + b;
ans += c;
a = b;
b = c;
if (c >= m)
{
break;
}
}
if (n == 1)
{
ans = a;
}
if (n == 2)
{
ans = a + b;
}
cout << ans;
return 0;
}