欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LuoguP1720 月落乌啼算钱 解题报告【模拟+找规律/数学】

程序员文章站 2022-07-12 21:27:36
...

题目背景
(本道题目木有以藏歌曲……不用猜了……)
《爱与愁的故事第一弹·heartache》最终章。
吃完pizza,月落乌啼知道超出自己的预算了。为了不在爱与愁大神面前献丑,只好还是硬着头皮去算钱……
题目描述
算完钱后,月落乌啼想着:“你TMD坑我,(以下用闽南语读)归粒靠杯靠亩诶,(以下用英读)是伊特游!”于是当爱与愁大神问多少钱时,月落乌啼说了一堆乱码。爱与愁大神说:“算了算了,我只问第n样菜价格多少?”月落乌啼写出了:LuoguP1720 月落乌啼算钱 解题报告【模拟+找规律/数学】。由于爱与愁大神学过编程,于是就用1分钟的时间求出了Fn的结果。月落乌啼为此大吃一惊。你能学学爱与愁大神求出Fn的值吗?
输入输出格式
输入格式:
只有1行:n
输出格式:
只有1行:Fn,保留两位小数。
输入输出样例
输入样例#1:
6
输出样例#1:
8.00
说明
简单死了……
所有数据:n<=48
解题报告
一看这道题可以模拟出来(代码来自luogu):

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
double F(int x)
{
    double a=1,b=1;
    for(int i=0;i<x;i++)
    {
        a*=(0.5+sqrt(5)/2);
        b*=(0.5-sqrt(5)/2);
    }
    a-=b;
    a/=sqrt(5);
    return a;
}
int main()
{
    int n;
    cin>>n;
    printf("%.2lf",F(n));
    return 0;
}

然而如果我们打个表,或者有一定的知识水平,不难发现这个公式:
LuoguP1720 月落乌啼算钱 解题报告【模拟+找规律/数学】
实际上就是a1=1,a2=1的斐波那契数列的通项公式。
证明(来源于知乎):
LuoguP1720 月落乌啼算钱 解题报告【模拟+找规律/数学】
代码如下:

#include<cstdio>
const int N=100;
double f[N+5];
int n;
int main()
{
    scanf("%d",&n);
    f[1]=1.0,f[2]=1.0;
    for(int i=3;i<=n;i++)f[i]=f[i-1]+f[i-2];
    printf("%.2lf",f[n]);
    return 0;
}

需要注意的是,n=48时,f[n]是会超过max_int,所以要么用long long来存,要么用double。

相关标签: 乱码