題目4-7 斐波那契數列、跳臺階、矩形覆蓋
阿新 • • 發佈:2019-02-12
這些題目的做法都很類似,所以放在一起寫,都是同類型的遞推題。題目4、5、7遞推式其實都是斐波那契數列:f(n)=f(n-1)+f(n-2),其中的初值不同。題目6的遞推式為f(n)=f(n-1)+f(n-2)+...f(0),由些可得f(n - 1) = f(n - 2) + f(n -3) + ...+f(0);所以可得:f(n) = 2*f(n - 1);都可以通過迭代直接求得!!注意題目的資料範圍,可能會超int範圍。所以用long long int!
以下給出第4題 和第6題 的AC程式碼!第4題、第5題、第7題的程式碼類似,只要更改一下初值就可以了!
//第四題 原始碼 #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <cctype> #include <cstdlib> #include <string.h> #include <algorithm> #include <cmath> using namespace std; #define N 90 #define LL long long int LL ans[N + 10]; void generate() { int i; ans[0] = ans[1] = 1; for(i = 2;i <= N;i++) ans[i] = ans[i - 1] + ans[i - 2]; return; } int main() { int n; generate(); while(scanf("%d",&n) == 1) { printf("%lld\n",ans[n]);//注意使用64位數 } return 0; }
//第六題原始碼 #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <cctype> #include <cstdlib> #include <string.h> #include <algorithm> #include <cmath> using namespace std; #define N 65 #define LL long long int LL fib[N]; void generate() { int i; fib[0] = fib[1] = 1; for(i = 2;i <= 50;i++) fib[i] = 2 *fib[i - 1]; } int main() { int n; generate(); while(scanf("%d",&n) == 1) { printf("%lld\n",fib[n]);//注意用64位 } return 0; }