1. 程式人生 > 其它 >P5717 【深基3.習8】三角形分類 題解

P5717 【深基3.習8】三角形分類 題解

話不多說,咱先看題

題目大意

給出三條線段 a,b,ca,b,c 的長度,讓你判斷這三條線圍成的三角形有什麼性質

如果三條線段不能組成一個三角形,輸出Not triangle;

如果是直角三角形,輸出Right triangle;

如果是銳角三角形,輸出Acute triangle;

如果是鈍角三角形,輸出Obtuse triangle;

如果是等腰三角形,輸出Isosceles triangle;

如果是等邊三角形,輸出Equilateral triangle。

題目解析

咋看似乎不難,但其實有不少坑點:

1.等邊三角形一定是等腰三角形,但等腰三角形不一定是等邊三角形

2.當一個三角形是銳角三角形時,它就不可能是直角三角形或鈍角三角形,反之亦然(好像是廢話)

3.當三條線判定不為三角形時,就不能往下判斷了,比如由999 1 1 三條邊構成的就並不是等腰三角形

AC程式碼

#include <bits/stdc++.h>
using namespace std;
int main(){
	long long a,b,c,i;
	cin>>a>>b>>c;
   //底下三個if判斷是排序,使其a和b是短邊,c為長邊
	if(a>=c){
		i=a;
		a=c;
		c=i;
	}
	if(a>=b){
		i=a;
		a=b;
		b=i;
	}
	if(b>=c){
		i=b;
		b=c;
		c=i;
	}
	int key=0;//定義變數key來解決坑點 3
	if(a+b<=c){//判斷是否為三角形
		cout<<"Not triangle"<<endl;
		key=1;
	}
	
	if(a*a+b*b==c*c&&key==0){//判斷直角三角形
		cout<<"Right triangle"<<endl;
	
	}
	
	if(a*a+b*b>c*c&&key==0){//判斷銳角三角形
		cout<<"Acute triangle"<<endl;
	}
	
	if(a*a+b*b<c*c&&key==0){//判斷鈍角三角形
		cout<<"Obtuse triangle"<<endl;	
	}
	
	if(a==b&&key!=1){//判斷等腰三角形
		cout<<"Isosceles triangle"<<endl;
	}
	else if(a==c&&key!=1){
		cout<<"Isosceles triangle"<<endl;	
	}
	else if(b==c&&key!=1){
		cout<<"Isosceles triangle"<<endl;	
	}
	
	if(a==b&&b==c&&key!=1){//判斷等邊三角形
		cout<<"Equilateral triangle"<<endl;	
	}
	return 0;//AC!
}

評測記錄