g353 - 中央伍為準
題目描述
題目要求從輸入的字串中提取數字,並輸出位於中間位置的數字。輸入字串包含多個數字,數字之間可能存在空白。如果數字的數量為偶數,則輸出中間偏右的數字。
解題思路
程式碼首先讀取一行輸入字串。然後,它遍歷字串,將連續的數字字元轉換為整數,並將這些整數儲存在一個整數陣列 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];
}