洛谷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;
} 

 

posted @ 2018-10-21 13:35  kenlig  阅读(337)  评论(0编辑  收藏  举报