e659 - 11878 - Homework Checker
題目描述
題目要求讀取多行字串,每行字串代表一個數學題目,格式為 "a + b = c" 或 "a - b = c"。其中 a 和 b 是非負整數且不超過 100,c 是一個非負整數且不超過 200,或者是一個問號 "?"。程式需要計算弟弟答對的題目數量,並輸出這個數量。
解題思路
程式的主要邏輯是逐行讀取輸入字串,然後解析字串中的數字和運算符號。對於每一行輸入,程式首先提取數字 a、運算符號 c 和數字 b。然後,根據運算符號,計算 a 和 b 的結果,並將其與 c 進行比較。如果計算結果與 c 相同,則將答案計數器加一。最後,程式輸出答案計數器。
程式使用迴圈逐個字符地解析輸入字串。它使用條件判斷來判斷字符是數字還是運算符號。當遇到數字時,程式將其轉換為整數並累加到相應的變數中。當遇到運算符號時,程式記錄下運算符號,並繼續解析後面的數字。
複雜度分析
- 時間複雜度: O(N*M),其中 N 是輸入行數,M 是每行字串的長度。因為程式需要逐行讀取輸入,並逐個字符地解析字串。
- 空間複雜度: O(1),程式只使用了少數幾個變數來存儲數字和運算符號,因此空間複雜度是常數級別。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
string a;
int ans=0;
while(getline(cin,a)){
int al=a.length();
int x=0,y=0,z=0,i;
char c;
for(i=0;;i++){
if(a[i]>='0'&&a[i]<='9'){
x*=10;
x+=a[i]-48;
}
else{
c=a[i];
i++;
break;
}
}
for(;;i++){
if(a[i]>='0'&&a[i]<='9'){
y*=10;
y+=a[i]-48;
}
else{
i++;
break;
}
}
for(;;i++){
if(a[i]>='0'&&a[i]<='9'){
z*=10;
z+=a[i]-48;
}
else
break;
}
if(c=='+'){
if(x+y==z){
ans++;
}
}
else if(c=='-'){
if(x-y==z){
ans++;
}
}
}
cout << ans << "\n";
}