UVA 1586 分子量(Molar Mass)
2017-08-01 11:09
393 查看
大致题意:给出一种物质的分子式(不带括号),求分子量。这题中的分子式只含有4种原子,分别为C、O、H、N,原子量分别为12.01、16.00、1.008、14.01(单位:g/mol)。
Sample Input
4
C
C6H5OH
NH2CH2COOH
C12H22O11
Sample Output
12.010
94.108
75.070
342.296
整体思路:就是判断哪个是字母,字母之后紧跟有几个数字(0或1或2),然后逐个判断后进行操作即可。
Sample Input
4
C
C6H5OH
NH2CH2COOH
C12H22O11
Sample Output
12.010
94.108
75.070
342.296
整体思路:就是判断哪个是字母,字母之后紧跟有几个数字(0或1或2),然后逐个判断后进行操作即可。
#include<stdio h=""> #include<string h=""> #include<ctype h=""> double ch(char mol) { switch(mol){ case 'C':return 12.01; case 'H':return 1.008; case 'O':return 16.00; case 'N':return 14.01; } return 0.0; } int main() { int npos,leap,len,T; double sum=0.0,summ=0.0; char str[105]; scanf("%d",&T); getchar(); while(T--){ leap=0;npos=0;sum=0,summ=0; gets(str); len=strlen(str); while(npos<len){ if(ch(str[npos])!=0.0){ //判断这个字符是不是字母 (是) if(isdigit(str[npos+1])){ // 判断字母后面是不是数字 (是) sum+=ch(str[npos])*(str[++npos]-'0'); leap=1; //当这个字符串的此部分是字符+一个数字时 leap=1 } else sum+=ch(str[npos]); //如果字符后面不是数字 比如OH时,执行此步 } if(leap==1 && isdigit(str[npos+1])){ // 说明此部分是一个字母加两个数字 sum=sum*10+ch(str[npos-1])*(str[++npos]-'0'); } npos++; leap=0; summ+=sum; sum=0; } printf("%.3lf\n",summ); }return 0; } </ctype></string></stdio>
相关文章推荐
- 算法竞赛入门竞赛 习题3-2 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
- Molar Mass, ACM/ICPC Seoul 2007,Uva1586 给出一种物质的分子式,求分子量
- UVa 1586 Molar Mass(分子量)
- 算法竞赛入门经典-习题3-2 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
- UVa 1586 Molar mass(分子量)
- 分子量 (Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
- b2bf 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
- 习题3-2 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
- 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
- UVa 1586 Molar mass (计算分子量,不含扩号)
- 分子量(Molar Mass,UVa 1586)水题
- Uva1586-Molar Mass-分子量
- 分子量 (Molar Mass,ACM/ICPC Seoul 2007,UVa 1586)
- uva 1586 - Molar mass(分子量)
- 小紫书 习题 3-2(UVA 1586) 分子量(Molar mass)
- UVa1586 Molar mass 分子量 (java版本)
- UVa1586-Molar Mass(分子量)
- UVa 1586:Molar mass
- UVA - 1586 Molar mass
- UVa 1586, Molar Mass