#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 關注
- 87 瀏覽
添加回答
舉報
0/150
提交
取消