UVA-1586分子量

该博客介绍了如何解决UVA-1586算法竞赛问题,即根据给定的分子式计算其分子量。博主分析了难点在于处理连续数字时计算元素总分子量,并提出了解决方案:只在遇到字母时累加分子量,数字用于后续处理。提供了样例输入和输出,并附带了代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题见:http://vjudge.net/problem/UVA-1586
题目大意:给出一种物质的分子式,求它的分子量。已知包含四种分子:
H 1.008g/mol
O 16.00g/mol
C 12.01g/mol
N 14.01g/mol
样例输入:
4
C
C6H5OH
NH2CH2COOH
C12H22O11
样例输出:
12.010
94.108
75.070
342.296

难点分析:当存在连续的数字时对于其元素的总分子量计算的问题。
整体思路:加分子量时只考虑是字母的情况,数字则是在之后考虑,并不直接参与计算
下面上代码:

#include<iostream>
#include<cstring>
#include<cctype>
using namespace std;

double a[4]={12.01,1.008,16.00,14.01};
double pan(char b)              //判断是哪种元素
{   double x;
    if(b=='C')
    x=a[0];
    else if(b=='O')
    x=a[2];
    else if(b=='H')
    x=a[1];
    else if(b=='N')
    x=a[3];
    return x;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        char str[80];
        memset(str,0,sizeof(char));
        scanf("%s",str);
        double sum=0;
        int n=strlen(str);

        for(int i=0;i<n;i++){
            if(str[i]=='O'||str[i]=='H'||str[i]=='C'||str[i]=='N')
            if(isdigit(str[i+1])&&isdigit(str[i+2]))
            sum+=(10*(str[i+1]-'0')+(str[i+2]-'0'))*pan(str[i]);
            //对于两个连续数字的处理,其实没有完全解决问题。并没有考虑三个数字连续的情况,不过题目数据也没有卡这个地方。
            else 
            sum+=(isdigit(str[i+1])?(str[i+1]-'0'):1)*pan(str[i]);
            //看元素后一位是否是数字
        }

        printf("%.3f\n",sum);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值