c++中的毕达哥拉斯定理错误



我的代码找出三角形是否直角并显示"正确",如果不是那么"错误",但它只适用于一种格式(较小的边->斜边,即输入6 8 10给出"正确",这是真的,但输入8 6 10或10 6 8给出错误的任何其他安排的3值给出错误,虽然我设置我的if语句为任何顺序工作。

#include <iostream>
using namespace std;
int main()
{
    int a, b, c, hypotenuse;
    while(cin >> a >> b >> c)
    {
        if(a > b && a > c)
        {
            hypotenuse = a;
            if(b * b + c * c == hypotenuse)
                cout << "right" << endl;
            else
                cout << "wrong" << endl;
        }
        else if(b > a && b > c)
        {
            hypotenuse = b;
            hypotenuse *= hypotenuse;
            if(a * a + c * c == hypotenuse)
                cout << "right" << endl;
            else
                cout << "wrong" << endl;
        }
        else
            hypotenuse = c;
        hypotenuse *= hypotenuse;
        if(a * a + b * b == hypotenuse)
            cout << "right" << endl;
        else
            cout << "wrong" << endl;
    }
    return 0;
}

我希望@LogicStuff格式化你的代码后,你可以看到,你不平方斜边,如果它是a,你已经错过了括号围绕最后的else

然而,您应该注意的另一件事是代码重复的数量。在条件语句的每个分支中,都有相同的代码来打印这个三角形是否正确。您可以将其保存到一个布尔变量中,并将打印逻辑移动到循环的末尾。

更进一步,你的问题是否要求你知道三角形的哪条边是斜边?从你写的来看,它没有,在这种情况下,你做了额外的工作。相反,您可以将代码简化为:

int a, b, c;
while (cin >> a >> b >> c)
{
    bool right =  (b*b + c*c == a*a)
               || (a*a + c*c == b*b)
               || (a*a + b*b == c*c);
    if (right)
        cout << "rightn";
    else
        cout << "wrongn";
}

最新更新