P1720 月落乌啼算钱(斐波那契数列)
先看一下题目:
题目背景
(本道题目木有隐藏歌曲……不用猜了……)
《爱与愁的故事第一弹·heartache》最终章。
吃完 pizza,月落乌啼知道超出自己的预算了。为了不在爱与愁大神面前献丑,只好还是硬着头皮去算钱……
题目描述
算完钱后,月落乌啼想着:“你 TMD 坑我,(以下用闽南语读)归粒靠杯靠亩诶,(以下用英读)是伊特游!”于是当爱与愁大神问多少钱时,月落乌啼说了一堆乱码。爱与愁大神说:“算了算了,我只问第n样菜价格多少?”月落乌啼写出了:
由于爱与愁大神学过编程,于是就用 分钟的时间求出了 的结果。月落乌啼为此大吃一惊。你能学学爱与愁大神求出 的值吗?
输入格式
一行一个自然数 。
输出格式
只有 行一个实数 ,保留两位小数。
解题思路
一 、通过题目标题可得知,这道题是求斐波那契数列,题目里也给了公式:
规律:
- f[1]=1
- f[2]=1
- f[3]=2
- f[4]=3
- f[5]=5
- f[6]=8
......
f[i]=f[i-1]+f[i-2]
注意保留两位小数(也可以输出.00,记得开 long long )
代码实现:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
double f[100010]={0,1,1};
int main()
{
int n;
cin>>n;
for(int i=3;i<=n;++i)
{
f[i]=f[i-1]+f[i-2];//公式,求斐波那契
}
printf("%.2lf\n",f[n]);
return 0;
}
二 、打表
本题数据 ,完全可以打表
妈妈再也不用担心我TLE了
打表代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
double f[101]={1.00,1.00,2.00,3.00,5.00,8.00,13.00,21.00,34.00,55.00,89.00,144.00,233.00,377.00,610.00,987.00,1597.00,2584.00,4181.00,6765.00,10946.00,17711.00,28657.00,46368.00,75025.00,121393.00,196418.00,317811.00,514229.00,832040.00,1346269.00,2178309.00,3524578.00,5702887.00,9227465.00,14930352.00,24157817.00,39088169.00,63245986.00,102334155.00,165580141.00,267914296.00,433494437.00,701408733.00,1134903170.00,1836311903.00,2971215073.00,4807526976.00};//打表
int main()
{
int n;
cin>>n;
printf("%.2lf\n",f[n-1]);
return 0;
}
三、套公式
科普一下 :
返回x的y次方
套用公式
即可
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
int main()
{
int n;
cin>>n;
printf("%.2f",(pow(((1+sqrt(5))/2),n)-pow(((1-sqrt(5))/2),n))/sqrt(5));//公式
return 0;
}
四、记忆化搜索
记得要开long long!!!
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
long long f[10010];
long long dp(int x)
{
if(x==0) return 0;//特判
if(f[x]>0) return f[x];
if(x==1||x==2) return 1;
return f[x]=dp(x-2)+dp(x-1);
}
int main()
{
int n;
cin>>n;
cout<<dp(n)<<".00"<<endl;
return 0;
}
END~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】