# String# Simulation# Modulo

f047 - 三路縱隊

🔗 前往 ZeroJudge 原題

題目描述

題目要求將輸入的一串人名,按照三路縱隊的規則重新排列,並輸出三路縱隊的人名列表。規則是:第一個人留在第一縱隊,第二和第三個人分別加入第二和第三縱隊,第四個人留在第一縱隊,第五和第六個人分別加入第二和第三縱隊,以此類推。

解題思路

這題的解題思路非常簡單,就是按照題目描述的規則進行模擬。使用一個字串陣列 ans 來儲存三個縱隊的人名,使用一個整數變數 it 來追蹤目前處理的人名在隊伍中的位置。利用取模運算符 % 來決定將目前的人名加入哪個縱隊。

複雜度分析

  • 時間複雜度: O(n),其中 n 是輸入的人數。因為需要遍歷輸入字串並將每個名字添加到相應的縱隊中。
  • 空間複雜度: O(n),因為需要儲存三個縱隊的人名,最壞情況下,所有的人名都可能被分配到同一個縱隊。

程式碼

#include <iostream>
using namespace std;
int it=0;
string ans[3],s;
int main(){
	cin.tie(0); ios::sync_with_stdio(false);
	while(cin >> s){
		ans[it%3]+=s+" ";
		++it;
	}
	for(int i=0;i<3;++i){
		cout << ans[i] << "\n"; 
	}
}

Discussion