只考慮不含巢狀括號的情況(80分)
思路(注:未用map儲存,使用vector儲存元素和個數):
(1)是否為 =:以=為界,將方程式分為左右兩部分
(2)是否為 +:以+為界,得到每一項
(3)是否為數字(需要有對應的變數記錄數字前一項的內容):
·數字前一項為字母:乘以對應元素
·數字前一項是否為 ):乘以括號對應元素
·否則,數字為該項開頭:乘以該項中的所有元素
(4)是否為 ( :修改變數,標誌括號開始
(5)是否為 ):修改變數,標誌括號結束
(6)是否為大寫字母:以大寫字母為界得到乙個新元素
同時判斷元素是否中括號中,記錄括號個數
(7)是否為小寫字母:小寫字母與其前面的字母為同一元素
(8)判斷:(當時未考慮重複元素,只要是遇到大寫字母就開啟乙個元素)
巢狀兩個迴圈,以方程式左邊為準,遍歷方程式右邊,遇到相同的就相減
最後左邊或右邊元素個數存在不為0的情況,則為n,否則為y
易錯點:數字不一定是一位數(由於未考慮這一點,一直是40分,改正後未80分),需用到字串轉數另
參考100分思路
通過 dfs(map& m1,string str,int num1)
遞迴的思想一層一層去掉括號,括號內的規律一致,邊界為單個元素
80分**
#include
using
namespace std;
intisdigit
(char ch)
else
}bool
isuppercase
(char ch)
else
}bool
islowercase
(char ch)
else
}int
main()
else
stringstream ss;
int tempp;
ss<
ss>>tempp;
if(flag_case)
else
count=0;
}else}}
else
if(s[index]
==')')if
(isuppercase
(s[index]))
index++;}
if(islowercase
(s[index]))
}}} index++
;while
(index
else
stringstream ss;
int tempp;
ss<
ss>>tempp;
if(flag_caser)
else
countr=0;
}else}}
else
if(s[index]
==')')if
(isuppercase
(s[index]))
index++;}
if(islowercase
(s[index]))
}}}bool res=
true
;int k=0;
while
(ksize()
) string s1=left[k]
.first;
string s2=right[m]
.first;
if(right[m]
.second&&s1==s2)
else
if(number>0)
else
} m++;}
k++;}
for(
int h=
0;hsize()
;h++)}
if(res)}}
if(res)
else
left.
clear()
; right.
clear()
;}return0;
}
CCF 201912 3 化學方程式
化學方程式,也稱為化學反應方程式,是用化學式表示化學反應的式子。給出一組化學方程式,請你編寫程式判斷每個方程式是否配平。本題給出的化學方程式由大小寫字母 數字和符號組成,不會出現其他字元。詳見輸入樣例 判斷輸入的化學方程式是否配平,是則輸出y,否則輸出n。第一行乙個正整數n。接下來n行,每行乙個化學...
201912 3 化學方程式
試題編號 201912 3 試題名稱 化學方程式 時間限制 1.0s 記憶體限制 512.0mb 前四個測試點還是很好寫的,不過加入小寫字母要注意cu as cs au這種情況,不能只是判斷字元種類的數目是否相同 include include include include using names...
CCF 大模擬之化學方程式 201912 3
給出化學方程式,判斷是否配平,所有方程式符合規範 例如 h2 o2 h2o 2h2 o2 2h2o 解題思路 include using namespace std struct elem inttodigit string equat,int i return dig void calcuelem...