1 6 1 三角形周長最長

2021-10-07 22:35:15 字數 1324 閱讀 7759

有n根棍子,棍子i的長度為ai。想要從中選出3根棍子組成周長盡可能長的三角形。請輸出最大的周長,若無法組成三角形則輸出0。

限制條件:

解法一這道題是《挑戰程式設計競賽(第二版)》第16頁的一道熱身題,是比較簡單的一道入門題。

題目中給出的n最大是100,所以可以通過簡單的列舉法便可得到答案,也就是書本上給出的題解,**如下:

#include

#include

#include

using

namespace std;

int a[

100]

;int

main()

for(i=

0;i}}

printf

("%d\n"

,ans)

;return0;

}

解法二

而給出的思考題要求程式的時間複雜度是o(nlogn),所以此題還有另一種解法。

由慣常思維:平方階轉化為線性對數階可以通過排序實現,可以大致得到的演算法的第一步即是對其排序

但是,排序後又該如何才能使得時間複雜度為o(nlogn)呢?

因排序最快的也是線性對數階,因此接下來只需要進行一次迴圈即可得解

而根據三角形的特徵:兩邊之和大於第三邊

假設有a,b,c,d四根棍子(已排序),先比較a+b跟c的大小,若a+b>c則可令最長的周長(以下定義為ans)為a+b+c,若a+b>d則b+c一定會大於d,因此就有ans=b+c+d,由此可知,只需要依次比較相鄰的三個元素即可!

以下給出**(這裡排序演算法利用了c++中algorithm標頭檔案裡面的sort()函式,時間複雜度為o(nlogn)):

#include

#include

#include

using

namespace std;

intmain()

sort

(a,a+n)

;//公升序

for(j=

0;j2;j++)}

printf

("%d\n"

,ans)

;return0;

}

對於資料量比較大的題目可以採用解法二的思路解題,而資料量比較小的話,兩種方法均可,而第一種相對而言不太費腦筋,可以投機取巧選擇更簡單的方法。

三角形最大周長

鐵子從森林裡收集了n根木棍,她開始將它們按順序的排成一排,從左到右依次為1到n,她回想起 在數學課上老師教她的三角形知識,她開始從這些木棍中間找三根木棍來組成乙個周長最大的三角形,這時她的兄弟順溜偷偷的溜了過來,偷走了第i根木棍,現在她想知道現在能夠組成周長最大的三角形 的周長是多少?第一行兩個整數...

輸出三角形面積和周長

本題要求編寫程式,根據輸入的三角形的三條邊a b c,計算並輸出面積和周長。注意 在乙個三角形中,任意兩邊之和大於第三邊。三角形面積計算公式 area s s a s b s c 其中s a b c 2。輸入為3個正整數,分別代表三角形的3條邊a b c。如果輸入的邊能構成乙個三角形,則在一行內,按...

輸出三角形面積和周長

本題要求編寫程式,根據輸入的三角形的三條邊a b c,計算並輸出面積和周長。注意 在乙個三角形中,任意兩邊之和大於第三邊。三角形面積計算公式 其中s a b c 2。輸入格式 輸入為3個正整數,分別代表三角形的3條邊a b c。輸出格式 如果輸入的邊能構成乙個三角形,則在一行內,按照 area 面積...