題目背景:
解法一:
#include<iostream>
using namespace std;
int main()
{
long long getStep(int, int);
int n,a,b;
cin>>n;
while(n--)
{
cin>>a>>b;
cout<<getStep(a,b)<<endl;
}
return 0;
}
long long getStep(int a, int b)
{
b = b - (a-1); //實際上相當於只有1個參數b,a到b換算成從1到t(t這裏就是更新後的b,a就爲1),步驟都一樣
if(b == 2)
{
return 1;
}
if(b == 3)
{
return 2;
}
long long f1 = 1;
long long f2 = 2;
long long step;
for(int i=3; i<b; i++)
{
step = f1 + f2;
f1 = f2;
f2 = step;
}
return step;
}
解法二:
#include<iostream>
using namespace std;
int main()
{
int n,a,b;
long long resultArray[52];
resultArray[0] = 0;
resultArray[1] = 1;
resultArray[2] = 2;
for(int i=3; i<52; i++)
{
resultArray[i] = resultArray[i-1] + resultArray[i-2];
}
cin>>n;
while(n--)
{
cin>>a>>b;
cout<<resultArray[b-a]<<endl;
}
return 0;
}
結果分析:
通過這個簡單的例子可以看出,利用數組存儲計算過程的好處:
1:代碼簡潔
2:效率高,只要計算一次,則所有的計算結果都放在裏面了,後面只需要到對應的位置去取數據即可。
3:邏輯簡單、思路清晰