# Math# Conditional Logic# Sorting

d507 - 三角形的判斷

🔗 前往 ZeroJudge 原題

題目描述

題目給定三角形的三個邊長,要求判斷該三角形是銳角、直角還是鈍角三角形。

解題思路

首先,需要確保 c 是最長的邊,以便簡化判斷。程式碼使用 XOR 運算來排序邊長,使得 c 總是最大的邊。然後,根據勾股定理判斷三角形的類型:如果 aa + bb == cc,則是直角三角形;如果 aa + bb < cc,則是鈍角三角形;否則,則是銳角三角形。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#include <stdio.h>
int main() {
int a,b,c;
while (scanf("%d%d%d",&a,&b,&c)>0) {
	if(a>b&&a>c){
		a=a^c;
		c=a^c;
		a=a^c;
	}
	else if(b>c){
		b=b^c;
		c=b^c;
		b=b^c;
	}
	if (a*a+b*b==c*c)
		printf("right triangle\n");
	else if (a*a+b*b<c*c)
		printf("obtuse triangle\n");
	else
		printf("acute triangle\n");
}
}

Discussion