2017-02-18 10 views
-2

私は、三角形の辺の長さを表す整数の配列Aを持っています。任意の2辺が他の2辺と同じように配列から取られている場合、3番目の最小長さを見つける必要があります。三角形の最小許容三角形を見つける

今は第三の側面はcよく、他の双方が可能ab(a>b)最小側である場合にはc>a-b又はc=a-b+1であることを知っています。

私は配列をソートし、可能な限り側面を見つけるために連続した違いを取った。しかし、私は間違った答えを得ています。次のように私のコードは次のとおりです。たとえばについては

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]ので、最低3分の1は1になります。それは私に応じて正しいですが、私には未知のテストケースに失敗しました。

どこが間違っていますか?私は間違いがif条件で+1にあると思う。しかし、私はそれを理解することはできません。

+2

からBになります期待される出力。 – user463035818

+0

@ tobi303それは問題です。私はそれが間違っているか分からない。なぜならどちらも入力と予想される出力を知らないからです。 – sammy

+2

?入力はどこから来ますか?あなたが答えを知らないなら、あなたのアプローチは間違っています。あなたは紙でそれを解決する方法を知っているときに初めて、ペンと紙を取るか、いくつかの[読書](https://en.wikipedia.org/wiki/Triangle)をしなければなりません。 – user463035818

答えて

0

定理:三角形の任意の2辺の長さの合計は、第3辺の長さよりも大きい。

uは8を選択し、13は、2つの側面を有するならば、第3の辺の最小の長さは6であり、最大値は、[MCVE]提供し、入力と出力と一緒に何であるかを教えてください20

+0

それを定理と呼ぶならば、証明または参照を与えるべきです;) – user463035818

+0

これは私がコードで行っていることです。 – sammy

+0

あなたの例は正しくありません。 2辺が8と13の場合、最小の3分の1は6でなく、最大は21ではありません。 – user463035818