字符串水题——相对分子质量

问题 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)。

输出

对于每组输入,输出相对分子质量。

样例输入

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值