如何在C ++中检查3面是否形成三角形

时间:2013-11-07 11:50:34

标签: c++ geometry

我试图检查3个边是否在C ++中形成一个三角形,但我尝试过的所有可能数字的答案都说错了......

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int a, b, c;

    cin >> a >> b >> c;

    if (pow(a,2) == pow(b,2) * pow(c,2) || pow(b,2) == pow(a,2) * pow(c,2) || pow(c,2) == pow(a,2) * pow(b,2))
        cout << "The sides form a triangle" << endl;
    else
        cout << "The sides do not form a triangle." << endl;
    return 0;
}

6 个答案:

答案 0 :(得分:16)

假设a,b,c是三角形的边。因此,它必须满足这个标准:

  1. a + b&gt; ç
  2. a + c&gt; B'/ LI>
  3. b + c&gt;一个
  4. 所有标准必须为真。如果其中一个是假的,那么a,b,c将不会创建三角形。

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main()
    {
        int a, b, c;
        cin >> a >> b >> c;
        // check whether a, b, c can form a triangle
        if (a+b > c && a+c > b && b+c > a)
            cout << "The sides form a triangle" << endl;
        else
            cout << "The sides do not form a triangle." << endl;
        return 0;
    }
    

答案 1 :(得分:3)

要检查的三角形条件,

(a + b > c),
(b + c > a),
(c + a > b)

答案 2 :(得分:2)

对于普通三角形

1. sum of any two sides is greater than third side (or)
2. difference of any two sides is less than third side

hint :  a+b > c || ...

对于直角三角形

1) sum of the squares of two sides equals the square of the longest side

提示:

Find the longest side of three sides, that is find longest number in the three..
square the remaining two nums, add them and equate it to square of longest number

答案 3 :(得分:1)

假设您只测试直角三角形,那么使用的逻辑是z ^ 2 = x ^ 2 + y + 2 所以逻辑上有一个错误:

 if (pow(a,2) == pow(b,2) * pow(c,2) || pow(b,2) == pow(a,2) * pow(c,2) || pow(c,2) == pow(a,2) * pow(b,2))

这应该是:

 if (pow(a,2) == pow(b,2) + pow(c,2) || pow(b,2) == pow(a,2) + pow(c,2) || pow(c,2) == pow(a,2) + pow(b,2))

但是即使有了这个改变,由于浮点数测试相等,结果可能会出错。制定一个特定的函数来测试2个浮点数是否足够接近你给出的容差,然后用它进行比较。

如果您不想仅限制直角三角形,那么您可能希望阅读triangle inequality。总之,三角形不等式只表明三角形中任何边的长度必须小于其他两条边的总和。

答案 4 :(得分:0)

一种有效的方法是对给定的方进行排序。如果给定一个完整的数组并且询问给定的数组元素是否形成三角形,这将是有效的。这可以应用于n个给定的边。 但是,这也适用于3面。假设给定的数组是b。在你的情况下,数组b的长度为h = 3.

sort(b,b+h);
for (int j=0;j<(h-2);j++){
    if (b[j]+b[j+1]>b[j+2])
    {
return true;
    }
}
else {
return false;
}

答案 5 :(得分:-1)

实际上,给定任意三个边,您只需要检查一个条件:最长边(例如c)小于两个较短边(例如a和b)的总和。就是

if c < a+b {
   return true;
} else return false;

这是三角形不等式定理的本质。当其他条件为三角形时,其他条件将完全成立,而与该条件无关的条件则无关紧要。当然,关键是使用简单的排序算法对三个边进行排序以找到最长的边。代码中的假设是,边已经排序,所以c最长。