有机物燃烧的化学方程式配平(洛谷P1994题题解,Java语言描述)
生活随笔
收集整理的這篇文章主要介紹了
有机物燃烧的化学方程式配平(洛谷P1994题题解,Java语言描述)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目要求
P1994題目鏈接
分析
我太菜了,虧得我高中時期還虐(or被虐)生化,如今多年過去竟然沒分析出來坑點,我太菜了。
我開始盲目認為“元素守恒”,所以對HHH原子數求和,
CxHyOzC_xH_yO_zCx?Hy?Oz?與氧氣反應的化學方程式:
CxHyOz+(x+y4?z2)+O2→xCO2+y2H2OC_xH_yO_z+(x+\frac{y}{4}-\frac{z}{2})+O_2→xCO_2+\frac{y}{2} H_2OCx?Hy?Oz?+(x+4y??2z?)+O2?→xCO2?+2y?H2?O
- y2\frac{y}{2}2y?要是個整數,所以若yyy是個奇數,那就要×2\times2×2。
- (x+y4?z2)(x+\frac{y}{4}-\frac{z}{2})(x+4y??2z?)是個整數,因為xxx是個整數,所以要求(y4?z2)(\frac{y}{4}-\frac{z}{2})(4y??2z?)是個整數,若此式不為整數,則繼續×2\times2×2,即可配平為全整數系數。
AC代碼(Java語言描述)
import java.util.Scanner;public class Main {private static int i = 0, c_counter = 0, h_counter = 0, o_counter = 0, temp = 0;private static char[] formula;private static int count() {int counter = 0;while (++i < formula.length && Character.isDigit(formula[i])) {temp *= 10;temp += formula[i]-'0';}if (temp == 0) {counter++;} else {counter += temp;temp = 0;}return counter;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);formula = scanner.nextLine().toCharArray();scanner.close();for ( ; i < formula.length; ) {switch (formula[i]) {case 'C':c_counter += count();break;case 'H':h_counter += count();break;default:o_counter += count();}}while ((h_counter & 1) != 0 || (h_counter - 2*o_counter) % 4 != 0) {c_counter <<= 1;h_counter <<= 1;o_counter <<= 1;}System.out.println(c_counter + " " + h_counter/2);}}總結
以上是生活随笔為你收集整理的有机物燃烧的化学方程式配平(洛谷P1994题题解,Java语言描述)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Groovy】Groovyc: Int
- 下一篇: 【Java】浅析八种基本类型和包装类型