算法竞赛入门经典(第2版):习题3-2 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
题目
给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol)。例如,C6H5OH的
分子量为94.108g/mol。
大意
字母代表的数值与后面跟着数字的相乘,C6H5OH=12.01*6+1.008*5+16.00+1.008=94.108
因为看错题意,以为是数字跟后面的字母相乘,重新写的时候脑子直接转不过来了,不知道该怎么写了,改着改着突然间发现把数组倒过来读不就行,当然也要把数字的位数调换过来
输入输出格式(洛谷)
输入:
输入n(2<=n<=99)
接下来n行为分子式
输出:
输出每个分子的分子式
//输入
4
C
C6H5OH
NH2CH2COOH
C12H22O11
//输出
12.010
94.108
75.070
342.296
代码
#include <stdio.h>
#include <string.h>
int main(){
char a[85];
int t;
scanf("%d",&t);
while(t--){
int x=1,flag=0;
double s=0;
scanf("%s",a);
for(int i=strlen(a)-1;i>=0;i--){
if(a[i]>='1'&&a[i]<='9'){
if(!flag){
x=a[i]-'0';
flag=1;
}else{
x+=(a[i]-'0')*10;
}
continue;
}
if(a[i]=='C'){
s+=12.01*x;
}else if(a[i]=='H'){
s+=1.008*x;
}else if(a[i]=='O'){
s+=16.00*x;
}else if(a[i]=='N'){
s+=14.01*x;
}
x=1,flag=0;
}
printf("%.3f\n",s);
}
return 0;
}
总结
理解错题意,感觉还是把代码全删了,重新想思路清晰一点