# Conditional Statements# Basic Math# Input/Output

d980 - 11479 - Is this the easiest problem?

🔗 前往 ZeroJudge 原題

題目描述

題目要求判斷給定的三條邊長是否能構成一個三角形,並根據邊長關係判斷三角形的種類(等邊、等腰、不等邊或無效)。

解題思路

程式首先讀取測試案例的數量。對於每個案例,讀取三條邊長 abc。然後,檢查這三條邊長是否都為正數。如果不是,則輸出 "Invalid"。如果都是正數,則檢查是否滿足三角形不等式(任意兩邊之和必須大於第三邊)。如果滿足三角形不等式,則根據邊長關係判斷三角形種類:如果三邊相等,則輸出 "Equilateral";如果恰好兩邊相等,則輸出 "Isosceles";否則,輸出 "Scalene"。如果三角形不等式不成立,則輸出 "Invalid"。

複雜度分析

  • 時間複雜度: O(T),其中 T 是測試案例的數量。因為對於每個案例,只需要進行常數次比較和判斷。
  • 空間複雜度: O(1),因為程式只使用了常數個變數來儲存邊長和結果。

程式碼

#include <iostream>

using namespace std;

int main(){
	
	long long int n=0;
	long long int a,b,c=0;
	cin >> n;
		for(long long int i=1;i<=n;i++){
			cin >> a >> b >> c;
			cout << "Case " << i << ": " ; 
			if(a>0&&b>0&&c>0){
				if(a+b>c&&b+c>a&&a+c>b){
					if(a==b&&b==c){
						cout << "Equilateral"; 
					}
					else if(c==a){
						cout << "Isosceles";
					}
					else if(a==b){
						cout << "Isosceles";
					}
					else if(b==c){
						cout << "Isosceles";
					}
					else {
						cout << "Scalene";
					}
				}
				else {
					cout << "Invalid";
				}
			}
			else{
				cout << "Invalid";
			}
			cout << endl;
		}
}

Discussion