# String Manipulation# Conditional Logic

k628 - Centauri Prime

🔗 前往 ZeroJudge 原題

題目描述

題目要求判斷一個王國的名字以哪個字母結尾,並根據結尾字母決定由 Alice、Bob 或 nobody 統治。如果王國名字以 'y' 或 'Y' 結尾,則沒有統治者。如果以元音字母結尾,則由 Alice 統治。否則,由 Bob 統治。

解題思路

程式碼首先讀取測試案例的數量 n。然後,對於每個測試案例,讀取王國的名字 s。程式碼檢查王國名字的最後一個字母是否為 'y' 或 'Y'。如果是,則輸出 "nobody"。否則,程式碼檢查最後一個字母是否為元音字母('A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u')。如果是,則輸出 "Alice"。否則,輸出 "Bob"。

複雜度分析

  • 時間複雜度: O(n*m),其中 n 是測試案例的數量,m 是王國名字的平均長度。因為對於每個測試案例,需要檢查王國名字的最後一個字母,以及是否為元音字母,這需要遍歷元音字母的集合。
  • 空間複雜度: O(1),因為程式碼使用的額外空間是固定的,不隨輸入大小而變化。

程式碼

#include <bits/stdc++.h>
using namespace std;
int n;
string s,a={'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u'};
int main(){
	cin.tie(0); ios::sync_with_stdio(0);
	cin >> n;
	getline(cin,s);
	for(int ca=1;ca<=n;++ca){
		getline(cin,s);
		cout << "Case #" << ca << ": " << s << " is ruled by ";
		bool ia=0;
		if(s[s.size()-1]=='y'||s[s.size()-1]=='Y'){
			cout << "nobody.\n";
			continue;
		}
		for(int i=0;i<a.size();++i){
			if(s[s.size()-1]==a[i]){
				ia=1;
			}
		}
		if(ia){
			cout << "Alice.\n";
		}
		else{
			cout << "Bob.\n";
		}
	}
}

Discussion