洛谷 B4575:[GESP202609 二级] 直角三角形 ← double

【题目来源】
https://www.luogu.com.cn/problem/B4575

【题目描述】
小双刚学会勾股定理,得知直角三角形的斜边的平方等于两直角边的平方和。
小双创造了直角三角形数列:数列前两项由小双指定,从第三项开始,数列中的每个数字的平方等于前两项的平方和。
……
小双给定了数列的前两项,并给定一个数列上限,想让你算算数列的第几项会超过小双给定的数列上限?

【输入格式】
输入三行,第一行一个浮点数是数列第一项,第二行一个浮点数是数列第二项,第三行一个浮点数表示数列上限。​​​​​​​

【输出格式】
输出一个正整数,表示第几项开始会超过小双给定的数列上限。​​​​​​​

【输入样例】
3.0
4.0
10.0

【输出样例】
6

【数据范围】
输入均为不超过 10000 的正数。
题目保证给定第一项小于第二项。
无需过度考虑浮点精度问题。

【算法分析】
注意:首先,读入初始两项 a、b 与阈值 lim,先判断 a、b 各自是否小于等于 lim,满足则分别计入计数。然后,依据 t 与 lim 的关系执行相应操作。

【算法代码】

#include <bits/stdc++.h>
using namespace std;

double a,b,lim;
int cnt;

int main() {
    cin>>a>>b>>lim;
    if(a<=lim) cnt++;
    if(b<=lim) cnt++;
    while(1) {
        double t=sqrt(a*a+b*b);
        if(t>lim) {
            cnt++;
            break;
        }
        cnt++;
        a=b,b=t;
    }
    cout<<cnt<<endl;

    return 0;
}

/*
in:
3.0
4.0
10.0

out:
6
*/



【参考文献】
https://gesp.ccf.org.cn/101/attach/1767258655293472.pdf

posted @ 2026-09-23 13:33  Triwa  阅读(2)  评论(0)    收藏  举报