# String Comparison# Conditional Logic# Input/Output

b898 - 1. 畢氏定理

🔗 前往 ZeroJudge 原題

題目描述

題目要求讀取多組測試案例,每組案例包含三個字串 abc。輸出這三個字串中長度最長的字串。如果有多個字串長度相同且最長,則輸出字典序最大的字串。

解題思路

程式碼首先讀取測試案例的數量 n。然後,在迴圈中讀取三個字串 abc。程式碼比較這三個字串的長度,找出最長的字串並輸出。如果有多個字串長度相同,則比較它們的字典序,輸出字典序最大的字串。

複雜度分析

  • 時間複雜度: O(n * m),其中 n 是測試案例的數量,m 是字串的最大長度。
  • 空間複雜度: O(m),主要用於儲存字串。

程式碼

#include <iostream>
#include <string>
using namespace std;
int main(){
	std::ios::sync_with_stdio(false);
    cin.tie(NULL);
	string a,b,c;
	int n=0;
	while(cin >> n){
		while(n>0){
			n--;
			cin >> a >> b >> c;
			if(a.length()>b.length()&&a.length()>c.length())
				cout << a << endl;
			else if(b.length()>a.length()&&b.length()>c.length())
				cout << b << endl;
			else if(c.length()>a.length()&&c.length()>b.length())
				cout << c << endl;	
			else{
				if(a.length()==b.length()&&b.length()==c.length()&&a.length()==c.length()){	
					for(int i=0;i<a.length();i++){
							if(a[i]>c[i]&&a[i]>b[i]){
								cout << a << endl;
								break;
							}
							else if(b[i]>c[i]&&b[i]>a[i]){
								cout << b << endl;
								break; 
							}
							else if(a[i]<c[i]&&c[i]>b[i]){
								cout << c << endl;
								break;
							}
					}
				}
				else{
					if(a.length()==b.length()){
						for(int i=0;i<a.length();i++){
							if(a[i]>b[i]){
								cout << a << endl;
								break;
							}
							else if(a[i]<b[i]){
								cout << b << endl;
								break;
							}
						}
					}
					else if(b.length()==c.length()){
						for(int i=0;i<b.length();i++){
							if(b[i]>c[i]){
								cout << b << endl;
								break;
							}
							else if(b[i]<c[i]){
								cout << c << endl;
								break;
							}
						}
					}
					else if(a.length()==c.length()){
						for(int i=0;i<a.length();i++){
							if(a[i]>c[i]){
								cout << a << endl;
								break;
							}
							else if(a[i]<c[i]){
								cout << c << endl;
								break;
							}
						}
					}
				}
			}
		}
	}
}

Discussion