# 實作題 - 三角形辨別 - APCS - by Peter Wang ## 題目資訊 此題為2016.10.29測驗中的題目1 ###### tags: `APCS` ## 題目敘述 三角形除了是最基本的多邊形外,亦可進一步細分為鈍角三形、直角三角形及銳角三角形。若給定三個線段的長度,透過下列公式運算,即可得知此三線段能否構成三角形,亦可判斷是直角、銳角和鈍角三角形。 提示:若a、b、c為三個線段的邊長,且c為最大值,則   若 a+b ≦ c     ,三線段無法構成三角形   若 a×a+b×b < c×c  ,三線段構成鈍角三角形(Obtuse triangle)   若 a×a+b×b = c×c  ,,三線段構成直角三角形(Right triangle)   若 a×a+b×b > c×c  ,三線段構成銳角三角形(Acute triangle) 請設計程式以讀入三個線段的長度判斷並輸出此三線段可否構成三角形?若可,判斷 並輸出其所屬三角形類型。 ### 輸入: 輸入僅一行包含三正整數,三正整數皆小於 30,001,兩數之間有一空白。 ### 輸出: 輸出共有兩行,第一行由小而大印出此三正整數,兩字之間以一個空白格間格,最後 一個數字後不應有空白;第二行輸出三角形的類型:   若無法構成三角形時輸出「No」;   若構成鈍角三形時輸出「Obtuse」;   若直角三形時輸出「Right」;   若銳角三形時輸出「Acute」。 ## 解題思路 把三邊長先做長度排序預處理,後做辨別。 ## 程式碼 ```clike= #include<iostream> #include<algorithm> #include<math.h> using namespace std; int main(){ int a,b,c; while(cin>>a){ cin>>b>>c; int arr[3]={a,b,c}; sort(arr,arr+3); int x=pow(arr[0],2)+pow(arr[1],2); int y=pow(arr[2],2); if(x==y){ cout<<arr[0]<<" "<<arr[1]<<" "<<arr[2]<<endl; cout<<"Right"<<endl; } else if(arr[0]+arr[1]<arr[2]){ cout<<arr[0]<<" "<<arr[1]<<" "<<arr[2]<<endl; cout<<"No"<<endl; } else if(x>y){ cout<<arr[0]<<" "<<arr[1]<<" "<<arr[2]<<endl; cout<<"Acute"<<endl; } else{ cout<<arr[0]<<" "<<arr[1]<<" "<<arr[2]<<endl; cout<<"Obtuse"<<endl; } } } ``` ## 資料來源 [zerojudge](https://zerojudge.tw/) [題目敘述](https://zerojudge.tw/ShowProblem?problemid=c294) [原題PDF檔](https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnx6c2dpdGl0aXR8Z3g6NTRkNzUxYTBkMmNjYTZmOA) ## 備註 >[name=PeterWang] >[time=Sun, Jun 13, 2021 11:52 PM]