洛谷 P1720: 月落乌啼算钱(斐波那契数列)
第 4 篇 CSDN!
这道题把斐波那契数列写在你脸上了,所以… 我们不用斐波那契数列,抛弃所有的递归和递推!
我们可以设 a = ( 1 + 5 2 ) n a=(\frac{1+\sqrt{5}}{2})^n a=(21+5)n, b = ( 1 − 5 2 ) n b=(\frac{1-\sqrt{5}}{2})^n b=(21−5)n,那么 F n = a − b 5 F_n=\frac{a-b}{\sqrt{5}} Fn=5a−b,还是非常好写的。
所以,上代码!
#include <bits/stdc++.h>
using namespace std;
int n;
int main() {
cin >> n;
long double a = pow((1 + sqrt(5)) / 2, n), b = pow((1 - sqrt(5)) / 2, n);
printf("%.2Lf", (a - b) / sqrt(5));
}
声明一下:在 C 语言中,要想为 l o n g d o u b l e long\ double long double 类型保留 2 2 2 位小数,就可以使用上面的输出语句,对应的 C++ 代码为:
#include <bits/stdc++.h>
using namespace std;
int main() {
long double a = 3.1415926;
int x = 3;
cout << fixed << setprecision(x) << a;
}
其中 a a a 是要保留的数字, x x x 是要保留的位数,运行代码得到 3.141 3.141 3.141
总结:
p
o
w
(
n
,
x
)
pow(n,x)
pow(n,x) 求
n
x
n^x
nx
s
q
r
t
(
x
)
sqrt(x)
sqrt(x) 求
x
\sqrt{x}
x