0%

牛客小白月赛102-B-连分数

题目大意

求解无限连分数 x = a + 1/(a + 1/(a + …)) 的值。即求解方程 x = a + 1/x 的正根。

AC代码 牛顿迭代法

x=a+1a+1a+1a+x=a + \frac{1}{a + \frac{1}{a + \frac{1}{a + \cdots}}}

因为是无限的递归,可以把a下面的看成一个整体,其实也是x,然后你就把这个问题转化成了求一元二次方程。

x=a+1xx = a + \frac{1}{x}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int T;
double a;

double solve(double a) {
// 使用公式直接计算连分数的解
return (a + sqrt(a * a + 4)) / 2;
}

int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);

cin >> T;
for(int _ = 1; _ <= T; _++) {
cin >> a;
double ans = solve(a);
cout << setprecision(24) << ans << endl;
}

return 0;
}
// AC https://ac.nowcoder.com/acm/contest/view-submission?submissionId=71962585