你应该从用户那里得到化学方程式的字符串(没有空格,只有字母(大写和小写),数字,括号和数学符号),如果方程是平衡的,你应该打印答案(任何一对正负的答案:是/否,真/假,1/0)。为了缩短代码,您可以假设输入字符串只能包含这些元素: Al、Ar、B、Be、C、Cl、Cr、Cu、Fe、H、He、K、N、O、S,还有一件事:可能有-符号。这都是关于数学的:+表示加法,-表示减法。
示例:
输入:
C6H5COOH-O2=7CO2+3H2O输出:
No输入:
2Fe(CN)6+2SO2+202=Fe2(SO4)2+6C2N2输出:
Yes输入:
2SO2=2SO4-2O2输出:
Yes最短的代码获胜。
发布于 2014-01-09 18:07:56
f=Times@@@Tr@CoefficientRules@ToExpression@(r=StringReplace)[r[
#<>")",{"="->"-(",x:_?LetterQ|")"~~y_?DigitQ:>x<>"^"<>y}],x_?UpperCaseQ:>" "<>x]⋃{}=={0}&结果:
f@"C6H5COOH-O2=7CO2+3H2O"
f@"2Fe(CN)6+2SO2+2O2=Fe2(SO4)2+6C2N2"
f@"2SO2=2SO4-2O2"假真
我把化学公式当作多项式来处理。

然后我只计算系数。
https://codegolf.stackexchange.com/questions/17931
复制相似问题