原题
http://www.codewars.com/kata/is-this-a-triangle/train/cpp
题目
Is this a triangle?
implement a method that accepts 3 integer values a, b, c. The method should return true if a triangle can be built with the sides of given length and false in any other case.
(In this case, all triangles must have surface greater than 0 to be accepted).
分析
三边构成三角形条件:任意两边之和大于第三边,任意两边之差小于第三边。
注意:int之和可能溢出
参考答案
namespace Triangle
{
bool isTriangle(int a, int b, int c)
{
long la(a),lb(b),lc(c);
return a>0 and b>0 and c>0 and
la-lb<lc and la-lc<lb and lb-lc<la and
la+lb>lc and la+lc>lb and lb+lc>la;
}
};
说明
本问题非常简单,但是要注意参数的特殊情况。
- 负值和
0
值的情况,需要把这两种情况排除。 - 参数是整型极大值的情况,两个整型极大值会溢出。所以要把
int
转long
其它
可以使用如下方式避免特殊情况。
bool isTriangle(int a, int b, int c){
return a-b<c and a-c<b and b-c<a;
}