UVA1586 分子量 元素下标任意位数版本
2017-11-09 01:44
393 查看
题目:给出一个只包含4种原子,分别为C,H,O,N,求分子量。原子量分别为12.01, 1.008, 16.00, 14.01.例如C6H5OH的分子量为94.108
分析:1.该题难点在于判断元素下标的提取(需要判断得知下标多少位数)。
2.看过其他博客也有同样题目的解析,只是鄙人觉得不够全面,因为其无法满足元素下标3位数或更高位数。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#define maxn 100
char s[maxn];
int num(char* b,int q) //num函数用来计算元素下标的数值
{
int tot=1;
int digit=0;
int p=q;
while(1)
{
if(!isdigit(b[p]))break;
tot++;
p++;
}
for(int i=0;i<tot-1;i++)
{
digit+=(b[q+i]-'0')*pow(10,i);
}
if(digit==0)digit=1;
return digit;
}
int sum(int* c,double* r) //sum函数用来计算分子量
{
double tot=0;
for(int i=0;i<4;i++)
{
tot+=c[i]*r[i];
}
return tot;
}
int main()
{ int T;
double arr[]={12.01,1.008,16.00,14.01};
scanf("%d",&T);
while(T--){
scanf("%s",s);
int n=strlen(s);
int a[4];
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
{
if(s[i]=='C')
{
a[0]+=num(s,i+1);
}
if(s[i]=='H')
{
a[1]+=num(s,i+1);
}
if(s[i]=='O')
{
a[2]+=num(s,i+1);
}
if(s[i]=='N')
{
a[3]+=num(s,i+1);
}
}
double ans=sum(a,arr);
printf("%.3f\n",ans);
}
return 0;
}
分析:1.该题难点在于判断元素下标的提取(需要判断得知下标多少位数)。
2.看过其他博客也有同样题目的解析,只是鄙人觉得不够全面,因为其无法满足元素下标3位数或更高位数。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#define maxn 100
char s[maxn];
int num(char* b,int q) //num函数用来计算元素下标的数值
{
int tot=1;
int digit=0;
int p=q;
while(1)
{
if(!isdigit(b[p]))break;
tot++;
p++;
}
for(int i=0;i<tot-1;i++)
{
digit+=(b[q+i]-'0')*pow(10,i);
}
if(digit==0)digit=1;
return digit;
}
int sum(int* c,double* r) //sum函数用来计算分子量
{
double tot=0;
for(int i=0;i<4;i++)
{
tot+=c[i]*r[i];
}
return tot;
}
int main()
{ int T;
double arr[]={12.01,1.008,16.00,14.01};
scanf("%d",&T);
while(T--){
scanf("%s",s);
int n=strlen(s);
int a[4];
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
{
if(s[i]=='C')
{
a[0]+=num(s,i+1);
}
if(s[i]=='H')
{
a[1]+=num(s,i+1);
}
if(s[i]=='O')
{
a[2]+=num(s,i+1);
}
if(s[i]=='N')
{
a[3]+=num(s,i+1);
}
}
double ans=sum(a,arr);
printf("%.3f\n",ans);
}
return 0;
}
相关文章推荐
- UVa1586 Molar mass 分子量 (java版本)
- 水题 UVA 1586 - Ancient Cipher化学式分子量计算
- UVa 1586 Molar Mass(分子量)
- uva 1586 分子量————C12H22O11读取数字12。。。
- UVa 1586 Molar mass(分子量)
- LeetCode刷题记录1-求容器的任意2个元素和某一值的下标
- 算法竞赛入门经典-习题3-2 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
- b2bf 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
- 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
- 分子量 (Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
- uva 1586 分子量
- 小紫书 习题 3-2(UVA 1586) 分子量(Molar mass)
- Molar Mass, ACM/ICPC Seoul 2007,Uva1586 给出一种物质的分子式,求分子量
- 分子量 (Molar Mass,ACM/ICPC Seoul 2007,UVa 1586)
- UVa 1586 Molar mass (计算分子量,不含扩号)
- 分子量(UVa1586)
- Uva1586-Molar Mass-分子量
- UVa1586-Molar Mass(分子量)
- 算法竞赛入门经典3.2 分子量UVa1586
- uva 1586 - Molar mass(分子量)