我有一个整数数组A
,表示三角形边长。如果从阵列中取出任何两个边作为另外两个边,我需要找到第三个可能的最小长度。
现在我知道,如果第三方为c
,而另外两方为a
且b(a>b)
最小可能方为c>a-b
或c=a-b+1
。< / p>
我对数组进行了排序并采取了连续的差异来找到可能的一面。但是我得错了答案。我的代码如下:
int n;
cin>>n; // stores length of sides of triangle
int a[n];
sort(a,a+n);
unsigned long long int min2 = numeric_limits<double>::infinity();
for(long long i=0;i<n-1;i++)
{
if ((a[i+1] - a[i] +1 ) <= min2)
min2 = a[i+1] - a[i] +1;
}
cout<<min2;
例如 - A = [2 2 2]所以最小的三分之一将是1.根据我的说法是正确的,但对我不知道的测试用例失败。
我在哪里做错了?我认为错误发生在if条件中的+1
。但我无法弄清楚。
答案 0 :(得分:0)
定理:三角形任意两边的长度之和大于第三边的长度。
如果你选择8和13有两个边,那么第三边的最小长度是6,最大值是b 20