2017-02-18 34 views
-2

我有一個整數A的數組,表示三角形的邊長。我需要找到第三種可能的最小長度,如果從陣列中取出任何兩側作爲另外兩側。尋找最小允許的三角形的第三面

現在我知道,如果第三側是c和其他雙方是ab(a>b)最低側可能被c>a-bc=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]因此最小第三會1.根據我是正確的,但無法對一個測試用例未知我。

我在哪裏做錯了?我認爲這個錯誤在if條件中是+1。但我無法弄清楚。

+2

請提供[MCVE],並告訴我們的輸入和輸出是連同預期的產出。 – user463035818

+0

@ tobi303這就是問題所在。我不知道哪裏出了問題,因爲我也不知道輸入和預期輸出。 – sammy

+2

呵呵?輸入來自哪裏?如果你不知道答案,那麼你的方法是錯誤的。只有當你知道如何在紙上解決它時,你應該先拿筆和紙或做一些[閱讀](https://en.wikipedia.org/wiki/Triangle),開始編寫代碼是有意義的。 – user463035818

回答

0

定理:三角形任意兩邊的長度總和大於第三邊的長度。

如果u選擇8和13具有兩個側面則對於第三側最小長度爲6和最大將b 20

+0

如果你稱之爲定理,你應該給出一個證明或參考;) – user463035818

+0

這就是我在代碼中所做的。 – sammy

+0

你的例子不正確。如果兩邊是8和13,那麼最小三分之一是5而不是6,最大是21不是20 – user463035818