#include<iostream>#include<vector>using namespace std;vector<int>c;int a=1;int b;int fib(int n){c.push_back(a);c.push_back(a);c.push_back(a);for(int i=2;n>i;i++){b=c[i]+c[i-1];c.push_back(b);}return c[n];}int main (){int n;while(cin>>n){cout<<fib(n)<<endl;c.clear();}}
2 回答
慕侠2389804
TA贡献1719条经验 获得超6个赞
#include<iostream>
#include<vector>//使用vector需要引用头文件
using namespace std;
vector<int>c;//c是一个vector容量,装的是int
int a=1;int b;
int fib(int n)
{
c.push_back(a); //给c装入三个1,事实上数列头三个数应该是0,1,1,第一个数应该是0
c.push_back(a);
c.push_back(a);
for(int i=2;n>i;i++)
{
b=c[i]+c[i-1];//使用下标方式访问c向量,计算后一个斐波那契数列中的数
c.push_back(b);//把计算出来的数推入c向量
}
return c[n];//返回结果是数列第n项
}
int main ()
{
int n;
while(cin>>n)//每次输入n,以文件结束符^z为结束
{
cout<<fib(n)<<endl;//输出斐波那契数列的第n项
c.clear();//每次清空c向量,重新计算(事实上如果不清空的话设计得好可以节约计算时间)
}
}
慕容森
TA贡献1853条经验 获得超18个赞
#include<iostream>#include<vector>using namespace std;vector<int>c;int a=1;int b;int fib(int n){ c.push_back(a); c.push_back(a); c.push_back(a);//像容器中连续插入3个1. for(int i=2;n>i;i++)//for 循环,如果n>i 循环继续,并且i逐次+1 { b=c[i]+c[i-1];//b的值为第i个元素和i+1个元素之和 ,根据规律来说, c[0],c[1],c[2]都为1,c[3]=2,c[4]=3,c[5]=5,c[6]=8,后者等于前2者之和。 c.push_back(b);//插入b } return c[n];//返回的值为第n+1个数比如n的值为3,返回的是c[3]但是实际是第四个数,应该是2}int main (){ int n; //定义n int 类型。。 while(cin>>n) //输入n { cout<<fib(n)<<endl; //输出函数fib的返回值。。这边可以转到上面继续~ c.clear();//清空容器c。 }}- 2 回答
- 0 关注
- 129 浏览
添加回答
举报
0/150
提交
取消
