shunfurh
编程介的小学生
采纳率92.7%
2019-09-22 10:01 阅读 160

化学方程式 程序的实现

Problem Description
还记得高中的化学方程式吗?当时化学课是我的最爱,老师常常需要我们用化学方程式来反应一种化学变化。但是粗心的我,常常在写化学方程式的时候,在一些细节上出问题。现在我们有很多的化学方程式,但是不知道其是否正确,需要你用编程来判断。
首先我们以例子来说明下化学方程式的格式:
2H2+O2==2H2O
3Fe + 2O2==Fe3O4
CaO + H2O == Ca(OH)2
1) 左边有N种化学品,右边有M种化学品,其中N>=1且M>=1,在每种化学品中,用一个大写字母或者一个大写字母加一个小写字母表示一种化学元素,每种化学元素在表示化学变化的符号“==”前后都出现。多于N>1和M>1的情况,相邻的两种化学品之间用一个“+”来连接。
2) 在每种元素(或者每种根,后面说明)后面出现的系数,是角标,表示这个元素或者根在这个化学品中出现的比例(主要和元素的最外层和次外层电子分布有关系,在这里不考虑具体的含义,只考虑格式),同时最先在这个化学品最前面的系数,表示这个化学方程式中,这种化学品参与化学反应的比例。根据守恒定理,前后出现的化学元素的个数必须相等。一般对于数字1都不用显式写出来(数据中也同样不会出现系数1),系数同样不为0(数据中也不出现)。
3) 对于一些由多个元素组成的串,表示一个“根”,如上面例子中的OH是一个氢氧根,也叫羟基。常常一个根必须由多个元素组成(单个元素不成为根),而在表示它们在化学品中出现的比例时,为了体现它们是一个小的部分,用括号包括起来(括号不能嵌套),再在其后加上系数,所以对于Ca(OH)2中,氧元素(O)与氢元素(H)同时出现两次,但是如果根只出现一次,可以加括号也可以不加,如NaOH。
4) 在一个化学方程式中,空格的出现一般是不受限制的,但是不能将同一个化学品内的元素以及所有与它们相关的系数分开,产生符号也不能分开。
5) 对于其他的一些特殊情况,如可逆化学方程式(事实上大部分的化学变化是可逆过程)用双向箭头表示,有些产生气体的分子后面需要用向上的箭头表示,在产生过程上还有可以加一些外界物理条件,产生沉淀需要说明等,我们不予考虑。

Input
输入有多个case,每个case占一行,每行表示一个化学方程式

Output
对于每个化学方程式,判断其格式上是否正确(这里不考虑意义上的正确性问题)。如果正确输出YES,否则NO。所以输入字符都是英文状态的。每个串长不超过100个字符,每种化学品的长度不超过20个字符。

Sample Input
2H2+O2==2H2O

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

相关推荐