d018 - 字串讀取練習
題目描述
題目要求解析包含序號和實數的字串,計算奇數序號對應實數的和,減去偶數序號對應實數的和,並輸出結果。字串的格式為 "序號:實數",序號可能不連續。
解題思路
程式碼首先讀取一行字串。然後,將字串中的冒號替換為空格,以便使用 stringstream 進行解析。接著,使用 stringstream 從字串中提取序號和實數。對於每一組序號和實數,判斷序號是奇數還是偶數,如果是奇數則將實數加到總和中,如果是偶數則將實數減去。最後,輸出計算得到的總和。
複雜度分析
- 時間複雜度: O(n),其中 n 是輸入字串的長度。因為需要遍歷字串一次來替換冒號,以及使用 stringstream 解析字串。
- 空間複雜度: O(1),因為使用的額外空間是常數級別的,例如替換冒號時的字串修改,以及 stringstream 的緩衝區。
程式碼
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
int z;
string a;
while(getline(cin,a)){
for(z=0;z<a.length();z++){
if(a[z]==':')
a[z]=' ';
}
stringstream s(a);
float n,num=0;
while(s>>z){
s>>n;
if(z%2==1)
num+=n;
else
num-=n;
}
cout<<num<<endl;
}
}