e997 - 升旗典禮抽背課文
題目描述
題目要求從一行以空格分隔的同學姓名中,找出倒數第 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] ;
}