本文已参与「新人创作礼」活动,一起开启掘金创作之路。
@TOC
五一假期前的最后一道题
传送门
时间限制:1秒
空间限制:128M
题目描述
后天就是五一假期了,小L约好了女生一起出去玩。他还剩下最后一道数论作业,写完就可以去嗨了。
题目是,求1 + 1 1 + 1 1 + 1 1 + ⋯ 1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\cdots}}} 1 + 1 + 1 + 1 + ⋯ 1 1 1 的值。
怀揣着与女神约会的激动心情,小L飞快地算了起来。一天、两天、⋯ \cdots ⋯ 眼看五一假期就要来了,这个计算何时才到尽头!
于是他找到了会编程的你,想让你编个程序,在五一放假之前得到答案。
输入描述
给你一个正整数n n n ,请你计算出n + 1 n + 1 n + 1 n + ⋯ n+\frac{1}{n+\frac{1}{n+\frac{1}{n+\cdots}}} n + n + n + n + ⋯ 1 1 1 的值。
如:样例一
1
即求1 + 1 1 + 1 1 + 1 1 + ⋯ 1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\cdots}}} 1 + 1 + 1 + 1 + ⋯ 1 1 1 的值。
数据范围:
1 ≤ n ≤ 1 0 8 1\leq n \leq 10^8 1 ≤ n ≤ 1 0 8
输出描述
为了避免根号不易打出的尴尬,老师决定允许小L用3个整数来表示答案。
如:样例一
经过计算机夜以继日的运算 ,得到1 + 1 1 + 1 1 + 1 1 + ⋯ = 1 + 5 2 1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\cdots}}}=\frac{1+\sqrt5}{2} 1 + 1 + 1 + 1 + ⋯ 1 1 1 = 2 1 + 5 。
我们用三个数字a 、 b 、 c a、b、c a 、 b 、 c 来代表答案a + b c \frac{a+\sqrt b}{c} c a + b
1 5 2
题目分析
一个可以无限递推下去的式子,一定具有某种神秘的规律。
小学三年级的数学老师教过我们,求谁设谁。
所以我们设1 + 1 1 + 1 1 + 1 1 + ⋯ = x 1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\cdots}}}=x 1 + 1 + 1 + 1 + ⋯ 1 1 1 = x 。
现在1 + 1 一大块 = x 1+\frac{1}{一大块}=x 1 + 一大块 1 = x 。那么这一大块等于什么呢?这一大块等于1 + 1 1 + 1 1 + 1 1 + ⋯ 1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\cdots}}} 1 + 1 + 1 + 1 + ⋯ 1 1 1 ,还是x x x 。
因此我们有1 + 1 x = x 1+\frac{1}{x}=x 1 + x 1 = x 。
解得x = 1 + 5 2 x=\frac{1+\sqrt{5}}{2} x = 2 1 + 5 或x = 1 − 5 2 x=\frac{1-\sqrt{5}}{2} x = 2 1 − 5 (< 0 <0 < 0 ,舍去)
当1 1 1 变成n n n 时
解n + 1 x = x n+\frac{1}{x} = x n + x 1 = x 得x = n + ( n 2 + 4 ) 2 x=\frac{n+\sqrt{(n^2+4)}}{2} x = 2 n + ( n 2 + 4 ) 或x = n − ( n 2 + 4 ) 2 x=\frac{n-\sqrt{(n^2+4)}}{2} x = 2 n − ( n 2 + 4 ) (< 0 <0 < 0 ,舍去)
注意事项
Δ = n 2 + 4 > 0 \Delta=n^2+4>0 Δ = n 2 + 4 > 0 ,一定有解
n − ( n 2 + 4 ) < 0 n-\sqrt{(n^2+4)}<0 n − ( n 2 + 4 ) < 0 ,一定有一解舍去
分母为2 2 2 ,可能需要约分
n n n 的范围是1 0 8 10^8 1 0 8 ,n 2 n^2 n 2 可能超出32位i n t int in t ,某些编程语言注意用l o n g l o n g long\ long l o n g l o n g
AC代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main ()
{
ll n;
cin >> n;
ll a = n, b = n * n + 4 , c = 2 ;
if (a % 2 == 0 && b % 4 == 0 )
a /= 2 , b /= 4 , c /= 2 ;
printf ("%lld %lld %lld\n" , a, b, c);
return 0 ;
}
同步发文于我的CSDN,原创不易,转载请附上原文链接 哦~
Tisfy:letmefly.blog.csdn.net/article/det…