UVA10649 Danger Point 题解

· · 题解

一道非常好的几何题,适合数学很好的谷民们食用。思路上参考了 sqh_let_it_be 大佬的思路,在此表示感谢!这题公式比较多,格式可能会炸,希望审核题解的管理员通融一下,感谢!

这篇题解进行了更新(原本已通过),删去了两行无用的代码块,希望能尽快过审。

题目翻译

题目思路

楼上唯一一篇题解给出了证明过程,但没有对之进行解释,因此这篇题解将为您解释该过程。

这道题目主要用到的定理有以下两种:

垂径定理

勾股定理

满分代码

加上了详细的代码注释。

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    while (true)
    {
        double num1, num2;
        cin >> num1 >> num2; // 读取输入的两个数

        // 输入为0时退出循环
        if (num1 == 0 && num2 == 0)
            return 0;

        double radius = num1 / 2; // 计算半径(直径的一半)
        double diameter = num2; // 直径为输入的第二个数

        double result, intermediateResult;
        intermediateResult = 2 * radius * radius - diameter * diameter; // 计算中间结果

        // 判断解是否存在
        if (intermediateResult <= 0)
        {
            cout << "INCORRECT INFORMATION !!!" << endl; // 解不存在,输出错误信息
        }
        else
        {
            result = sqrt(intermediateResult); // 计算最终结果
            printf("%.6lf\n", result); // 输出结果,保留小数点后6位
        }
    }

    return 0;
}