1. 程式人生 > >洛谷P1720 月落烏啼算錢

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