博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
8626 原子量计数
阅读量:4678 次
发布时间:2019-06-09

本文共 3669 字,大约阅读时间需要 12 分钟。

8626 原子量计数

时间限制:1000MS  内存限制:1000K

提交次数:218 通过次数:89

题型: 编程题   语言: G++;GCC

 

Description

给出一个化学原子式,仅含有C,H,O,N 四种元素,计算其总分子量。
例如,C6H5OH 的原子量为94.108g/mol,计算方法为:6 × (12.01 g/mol) + 6 × (1.008 g/mol) +1 × (16.00 g/mol).

输入格式

输入的第一行是数字T,表示输入文件含有T个CASE。之后有T行,每行有一个长度小于100 的字符串,表示要求的分子式。原子都用大写字母表示,没有括号,保证所有的式子都合法。

输出格式

输出每个式子的原子量。

 

输入样例

4CC6H5OHNH2CH2COOHC12H22O11

 

输出样例

12.01094.10875.070342.296

 

提示

 

 

来源

 PKKJ @ 07 GIS 1 

 

作者

 admin

 

  很简单的一道模拟题,代码不是很长,测试数据也并不坑人;直接上代码:

1 #include 
2 #include
3 #include
4 #include
5 6 //using namespace std; 7 8 int main() 9 { 10 int T; 11 char s[200]; 12 int i,j,k,c,o,h,n; 13 scanf("%d\n",&T); 14 for(i=0; i
='0'&&s[k]<='9') 29 while(s[k]>='0'&&s[k]<='9') 30 { 31 if(k>j+1) 32 temp=temp*10+s[k]-'0'; 33 else 34 temp+=s[k]-'0'; 35 k++; 36 } 37 else 38 temp++; 39 c+=temp; 40 } 41 42 else if(s[j]=='O') 43 { 44 k=j+1; int temp=0; 45 if(s[k]>='0'&&s[k]<='9') 46 while(s[k]>='0'&&s[k]<='9') 47 { 48 if(k>j+1) 49 temp=temp*10+s[k]-'0'; 50 else 51 temp+=s[k]-'0'; 52 k++; 53 } 54 else 55 temp++; 56 o+=temp; 57 58 } 59 else if(s[j]=='H') 60 { 61 k=j+1;int temp=0; 62 if(s[k]>='0'&&s[k]<='9') 63 while(s[k]>='0'&&s[k]<='9') 64 { 65 if(k>j+1) 66 temp=temp*10+s[k]-'0'; 67 else 68 temp+=s[k]-'0'; 69 k++; 70 } 71 else 72 temp++; 73 h+=temp; 74 75 76 } 77 else if(s[j]=='N') 78 { 79 k=j+1;int temp=0; 80 if(s[k]>='0'&&s[k]<='9') 81 while(s[k]>='0'&&s[k]<='9') 82 { 83 if(k>j+1) 84 temp=temp*10+s[k]-'0'; 85 else 86 temp+=s[k]-'0'; 87 k++; 88 } 89 else 90 temp++; 91 n+=temp; 92 93 94 } 95 } 96 double sum_c=12.010,sum_h=1.008,sum_o=16.000,sum_n=14.010; 97 double ans=c*sum_c+h*sum_h+o*sum_o+n*sum_n; 98 printf("%.3lf\n",ans); 99 }100 return 0;101 }

 

下面是另一种方法:

#include 
#include
int check(int temp[],int n);int digit(char a);int main(){ int T; scanf("%d",&T); const double w_h=1.008,w_n=14.01,w_o=16.00,w_c=12.01; while(T--) { char a[105]; int i,j,num_h=0,num_n=0,num_o=0,num_c=0; double sum=0; scanf("%s",a); int alen=strlen(a); // { int temp[20]; for(i=0;i
=0;i--) { sum+=temp[i]*m; m*=10; } return sum;}int digit(char a){ if(a<='9'&&a>='0') return 1; else return 0;}

  

转载于:https://www.cnblogs.com/geek1116/p/5222452.html

你可能感兴趣的文章
hdu 2068
查看>>
Leetcode 136. 只出现一次的数字
查看>>
SQL 分页 根据 当前页和页大小
查看>>
c# Chart 修改Legend
查看>>
5-6 可变参数
查看>>
查找算法
查看>>
ASP.NET配置KindEditor文本编辑器 【转载】
查看>>
九、oracle 事务
查看>>
java 连接池的简单实现
查看>>
on-tap和on-click
查看>>
HDU_5783_DivideTheSequence
查看>>
使用memcached提升网站服务器性能
查看>>
标题元素不允许嵌套
查看>>
swagger注释API详细说明
查看>>
Java学习-第三天
查看>>
Cookie
查看>>
java ftp
查看>>
Java 垃圾收集机制
查看>>
webapi中的自定义路由约束
查看>>
页面如何自动滚动到指定位置
查看>>