洛谷P1720 月落乌啼算钱
入门难度的水题,适合各位打表食用。
别问我为啥做入门难度的题,(因为我懒
法一:直接根据题意给出的公式模拟即可。
特殊技巧:使用cmath库中的pow函数,该函数为pow(a,b),返回a的b次方,类型为浮点类型。
Code:
#include<iostream> #include<cmath> #include<cstdio> using namespace std; int n; inline double calc(double n){ return (pow(((1+sqrt(5))/2),n)-pow(((1-sqrt(5))/2),n))/sqrt(5); } int main(){ cin>>n; printf("%.2lf",calc(n)); return 0; }
法二:观察公式。
分别带入N=1,2,3,4,5发现这就是个斐波那契数列。还是个裸的。
Code:
#include<iostream> #include<cstdio> #include<cmath> #define ll long long using namespace std; int f[10000],n; int main(){ cin>>n; f[1]=1; f[0]=0; for(int i=2;i<=n;i++){ f[i]=f[i-1]+f[i-2]; } cout<<f[n]<<".00"; return 0; }
还没完!你会发现这个代码WA了一个点,这是为什么呢?
怀疑是不是卡了我double的精度?
再试试!
Code:(AC)
#include<iostream> #include<cstdio> #include<cmath> #define ll long long using namespace std; double f[10000]; int n; int main(){ cin>>n; f[1]=1; f[0]=0; for(int i=2;i<=n;i++){ f[i]=f[i-1]+f[i-2]; } printf("%.2lf",f[n]); return 0; }