# Array# String Parsing

g353 - 中央伍為準

🔗 前往 ZeroJudge 原題

題目描述

題目要求從輸入的字串中提取數字,並輸出位於中間位置的數字。輸入字串包含多個數字,數字之間可能存在空白。如果數字的數量為偶數,則輸出中間偏右的數字。

解題思路

程式碼首先讀取一行輸入字串。然後,它遍歷字串,將連續的數字字元轉換為整數,並將這些整數儲存在一個整數陣列 a 中。最後,程式碼輸出陣列 a 中間位置的元素。中間位置的計算方式是 sz/2,其中 sz 是陣列 a 的大小。由於整數除法會向下取整,因此對於偶數大小的陣列,它會選擇中間偏右的元素。

複雜度分析

  • 時間複雜度: O(n),其中 n 是輸入字串的長度。這是因為程式碼需要遍歷輸入字串一次以提取數字。
  • 空間複雜度: O(k),其中 k 是輸入字串中數字的數量。這是因為程式碼需要一個陣列 a 來儲存提取的數字。

程式碼

#include <iostream>
using namespace std;
string s;
int a[1001],sz;
int main(){
	getline(cin,s);
	for(int i=0;i<s.size();++i){
		if(s[i]>='0'&&s[i]<='9'){
			int ct=0;
			while(s[i]>='0'&&s[i]<='9'){
				ct*=10;
				ct+=s[i]-'0';
				++i;
			}	
			a[sz++]=ct;
		}
	}
	cout << a[sz/2];
}

Discussion