# String Manipulation# Array

e997 - 升旗典禮抽背課文

🔗 前往 ZeroJudge 原題

題目描述

題目要求從一行以空格分隔的同學姓名中,找出倒數第 n 個同學的名字。

解題思路

程式首先讀取包含同學姓名的字串和倒數的號碼 n。然後,程式將字串分割成一個字串陣列,每個元素代表一個同學的名字。最後,程式計算陣列中需要跳過的元素數量 (k = n - 1),並輸出陣列中索引為 k 的元素,即倒數第 n 個同學的名字。

複雜度分析

  • 時間複雜度: O(N),其中 N 是同學姓名字串的長度。主要時間花在分割字串和尋找倒數第 n 個同學。
  • 空間複雜度: O(M),其中 M 是班級人數。主要空間花在儲存同學姓名陣列。

程式碼

#include <iostream>
#include <string>
using namespace std;
string b[51];
int main(){
	int n,k=0;
	string a,c;
	getline(cin,a);
	a+=' ';
	cin >> n;
	for(int i=0,al=a.length();i<al;++i){
		if(a[i]==' '){
			b[k++]=c;
			c.clear();
		}
		else
			c+=a[i];
	}
	k-=n;
	cout << b[k] ;
}

Discussion