这是本蒟蒻的第2篇题解......(不喜勿喷
题目背景
略
题目描述
P1720
算完钱后,月落乌啼想着:“你 TMD 坑我,(以下用闽南语读)归粒靠杯靠亩诶,(以下用英读)是伊特游!”于是当爱与愁大神问多少钱时,月落乌啼说了一堆乱码。爱与愁大神说:“算了算了,我只问第 n 样菜价格多少?”月落乌啼写出了:
· Fn=((1+√5)/2)^n-((1-√5)/2)^n / √5
由于爱与愁大神学过编程,于是就用 11 分钟的时间求出了 F_nFn 的结果。月落乌啼为此大吃一惊。你能学学爱与愁大神求出Fn 的值吗?
输入格式
一行一个自然数 nn。
输出格式
只有 11 行一个实数 F_nFn,保留两位小数。
输入输出样例
输入 #1
6
输出 #1
8.00
说明/提示
对于所有数据:0<=n<=48
本题有两种做法:
1.硬算
直接将公式带入即可。
2.根据斐波那契数列的特性进行编程
斐波那契数列:1,1,2,3,5,8......
不难发现,斐波那契数列中,F(n)=F(n-1)+F(n-2)
之所以,又有了两种方法:
1.因为n的范围较小,所以打表
2.先推出前两项,再根据规律求出第n项
下面,献上代码:
1.硬算
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
double a=(1+sqrt(5))/2.0;
double s1=1;
for (int i=0;i<n;i++){
s1*=a;
}
double b=(1-sqrt(5))/2.0;
double s2=1;
for (int i=0;i<n;i++){
s2*=b;
}
double ss=(s1-s2)/sqrt(5);
printf("%.2lf",ss);
return 0;
}
2.根据....
1.打表
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;cin>>n;
double ans[50]={
0.00,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,0
};
cout<<ans[n-1];
return 0;
}
2.
#include<iostream>
using namespace std;
long long a=1,b=1,c=0;
int n,i;
int main()
{
cin>>n;
for (i=3;i<=n;i++)
{
c=a+b;
a=b;
b=c;
}
cout<<c<<".00";
return 0;
}