我的代码找出三角形是否直角并显示"正确",如果不是那么"错误",但它只适用于一种格式(较小的边->斜边,即输入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";
}