【题目】
输入一种有机物(仅含有含有C、H、O三种元素),输出与氧气反应化学方程式中 \(CO_2\) 和 \(H_2O\) 的系数。
【输入/输出】
输入格式:
一行,一个字符串,形如 CxHyOz ,表示有机物 \(C_xH_yO_z\) 。
输出格式:
两个数,分别为 \(CO_2\) 和 \(H_2O\) 的系数
【题解】
第一步:对 CxHyOz 做字符串处理,把每种元素的原子数都提取出来。
设此有机物中C、H、O三种元素的数量为:x、y、z,均为自然数。
\(\begin{cases}
x \\
y \\
z \\
\end{cases}\)
第二步:利用化学方程式等号左右原子守恒原则进行配平,对系数列出方程组进行求解。(注意:对于有机化学方程式,不要利用化合价配平)
设此化学方程式各反应物和生成物的数量为:a、b、c、d,均为自然数。
\(aC_xH_yO_z+bO_2=cCO_2+dH_2O\)
\(\begin{cases}
C原子:ax=c \\
H原子:ay=2d \\
O原子:az+2b=2c+d \\
\end{cases}\)
化学方程式的系数是可以按比例变化的,所以这个方程组应该是无穷解,但是存在最简自然数解。
设其中的有机物的系数a为1,先解方程,然后对解出的值进行自然数判断,就可以得到最简自然数解。
解得:
\(\begin{cases}
a=1 \\
b={x+\frac{y}{4}-\frac{z}{2}} \\
c=x \\
d=\frac{y}{2} \\
\end{cases}\)
分析:
要求最简自然数解,挨个判断:
因为 a = 1,所以是自然数。
因为 c = x ,所以是自然数。
现在需要判断 b 和 d 是否为自然数。如果不为自然数,则 a、b、c、d 各系数统一 \(\times2\),即可配平为全自然数系数。
1. 当 d 为自然数,跳到步骤 3 执行,继续判断 b 是否为自然数;
2. 当 d 不为自然数,则 a、b、c、d 各系数统一 \(\times2\),跳到步骤 1 执行;
3. 当 b 为自然数,则输出 a、b、c、d 的值,程序结束;
4. 当 b 不为自然数,则 a、b、c、d 各系数统一 \(\times2\),跳到步骤 1 执行;
\(\begin{cases}
a \\
b \\
c \\
d \\
\end{cases}\)
第三步:程序
【测试】
案例1:碳在氧气中的燃烧,y、z等于0
\(C+O_2=CO_2\)
\(\begin{cases}
x=1 \\
y=0 \\
z=0 \\
\end{cases}\)
\(\begin{cases}
a=1 \\
b=1 \\
c=1 \\
d=0 \\
\end{cases}\)
案例2:一氧化碳在氧气中的燃烧,z等于0,需要系数统一 \(\times2\)
\(2CO+O_2=2CO_2\)
\(\begin{cases}
x=1 \\
y=0 \\
z=1 \\
\end{cases}\)
\(\begin{cases}
a=2 \\
b=1 \\
c=2 \\
d=0 \\
\end{cases}\)
案例3:绿原酸(Chlorogenic acid,以下简称CA)在氧气中的燃烧,x、y、z均为大于0的自然数
\(C_{16}H_{18}O_9+16O_2=16CO_2+9H_2O\)
\(\begin{cases}
x=16 \\
y=18 \\
z=9 \\
\end{cases}\)
\(\begin{cases}
a=1 \\
b=16 \\
c=16 \\
d=9 \\
\end{cases}\)
【参考】
https://blog.csdn.net/weixin_43896318/article/details/104844204
https://www.cnblogs.com/Elfish/p/7631603.html
https://zhidao.baidu.com/question/718108628913240125.html