CSP201912 3 化學方程式

2021-10-02 15:56:52 字數 1404 閱讀 7764

摘要:簡單化學方程式的原子守恆判斷,用類似處理算術表示式的方式處理一遍.**中輸出格式要去掉多餘部分(交了兩次0分很疑惑 最後發現格式不對)

題目見

思路:剛開始一直在想乙個比較合理的辦法,但是一直沒有想到合適的最後還是直接乙個乙個字元的處理.處理的時候每次處理一種元素以及它的原子個數分別由getnumber和getele完成;對於括號的處理用了遞迴的方式處理.

定義了eee結構體表示乙個化合物的元素構成,簡單定義了加法和乘法來對原子數的運算;

整體來說就說模擬了一遍計算表示式的計算,只不過數變成了化學式子.

#include "bits/stdc++.h"

#include #include #include #define mk(a,b) make_pair(a,b)

using namespace std;

#define m 1003

/* in

11h2+o2=h2o

2h2+o2=2h2o

h2+cl2=2nacl

h2+cl2=2hcl

ch4+2o2=co2+2h2o

cacl2+2agno3=ca(no3)2+2agcl

3ba(oh)2+2h3po4=6h2o+ba3(po4)2

3ba(oh)2+2h3po4=ba3(po4)2+6h2o

4zn+10hno3=4zn(no3)2+nh4no3+3h2o

4au+8nacn+2h2o+o2=4na(au(cn)2)+4naoh

cu+as=cs+au

>>ny

nyyy

yyyy

n*/struct eee

void add(string ele,int cnt=1)

eee operator *(int b)

return *this;

}eee operator+(eee &b)else

}return *this;

}};int getnumber(char *&p)

}return cnt;

}string getele(char *&p)

}return ele;

}void showe(eee &t)else if(*s==')')else

}if(cnt>0)re*cnt;

// showe(re);

return re;

}void eqcount(eee &e,char *s)

te=itemdis(s);

e+te;

}void eqcheck(eee &l,eee &r)}}

printf("%c\n",ans?'y':'n');

}void solve()

}int main()

201912 3 化學方程式

試題編號 201912 3 試題名稱 化學方程式 時間限制 1.0s 記憶體限制 512.0mb 前四個測試點還是很好寫的,不過加入小寫字母要注意cu as cs au這種情況,不能只是判斷字元種類的數目是否相同 include include include include using names...

CCF 201912 3 化學方程式

化學方程式,也稱為化學反應方程式,是用化學式表示化學反應的式子。給出一組化學方程式,請你編寫程式判斷每個方程式是否配平。本題給出的化學方程式由大小寫字母 數字和符號組成,不會出現其他字元。詳見輸入樣例 判斷輸入的化學方程式是否配平,是則輸出y,否則輸出n。第一行乙個正整數n。接下來n行,每行乙個化學...

CCF 大模擬之化學方程式 201912 3

給出化學方程式,判斷是否配平,所有方程式符合規範 例如 h2 o2 h2o 2h2 o2 2h2o 解題思路 include using namespace std struct elem inttodigit string equat,int i return dig void calcuelem...