问题 G: 相对分子质量
时间限制: 1 Sec 内存限制: 32 MB提交: 5 解决: 5
[ 提交][ 状态][ 讨论版]
题目描述
小明最近迷上了化学,几乎天天在实验室做实验,但是很多实验生成的化学产物的相对分子质量令他很困惑,不知如何计算,请你编程帮他计算。
输入
输入的第一行是一个正整数n,表示有n组测试数据。
接下来n行每行输入一个字符串,表示某个分子式,分子式中只包含大写字母和数字。
注意:
输入数据只包含8种元素,而这8种元素的相对原子质量如下:
H(1),C(12),N(14),O(16),F(19),P(31),S(32),K(39)。
接下来n行每行输入一个字符串,表示某个分子式,分子式中只包含大写字母和数字。
注意:
输入数据只包含8种元素,而这8种元素的相对原子质量如下:
H(1),C(12),N(14),O(16),F(19),P(31),S(32),K(39)。
输出
对于每组输入,输出相对分子质量。
样例输入
4
H2O
KOH
CH4
SO2
样例输出
18
56
16
64
提示
分析:和之前上传的那个字符串水题破译密码一样,都是比对+瞎搞,这个用了map会优雅一些。注意最后数组不要越界和分类讨论就好了
#include <bits/stdc++.h>
using namespace std;
map<char,int> mp;
int main()
{
string a;
mp['H']=1;
mp['C']=12;
mp['N']=14;
mp['O']=16;
mp['F']=19;
mp['P']=31;
mp['S']=32;
mp['K']=39;
int t;
cin>>t;
while(t--)
{
int cnt=0;
bool ok=0;
cin>>a;
int l=a.length();
for(int i=0;i<l-1;i++)
{
if(isdigit(a[l-1])) ok=1;
if(isalpha(a[i])&& isdigit(a[i+1]) )
{
cnt+=mp[a[i]]*(a[i+1]-48);
i++;
}
else
{
cnt+=mp[a[i]];
}
}
if(ok==0)
{
cnt+=mp[a[l-1]];
}
cout<<cnt<<endl;
}
return 0;
}