uva 1586 - Molar mass

在想更好的处理方法,现在却只能有这个糟烂的代码了……不好意思

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;

const int maxn=200;
char s[maxn];
double ans[maxn];

int get_num(int pos,int len)
{
    int temp;
    for(int i=pos;i<len;i++)
    {
        if(s[i]<='9'&&s[i]>='0')
            temp=i;
        else
            break;
    }
    int sum=0;
    for(int i=pos;i<=temp;i++)
    {
        sum=sum*10+(s[i]-'0');
    }
    return sum-1;
}

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        memset(ans,0,sizeof(ans));
        scanf("%s",s);
        int len=strlen(s);
        int flag=0;
        for(int i=0;i<len;i++)
        {
            if(s[i]=='C')
                ans[i]=12.01;
            if(s[i]=='H')
                ans[i]=1.008;
            if(s[i]=='O')
                ans[i]=16.00;
            if(s[i]=='N')
                ans[i]=14.01;
            if(s[i]>='1'&&s[i]<='9'&&flag==0)
            {
                ans[i]=ans[i-1]*get_num(i,len);
                flag=1;
            }
            if(!(s[i]>='1'&&s[i]<='9'))
            {
                flag=0;
            }
        }
        double sum_=0;
        for(int i=0;i<len;i++)
        {
            sum_+=ans[i];
        }
        printf("%.3lf\n",sum_);
    }
    return 0;
}

uva 1586 - Molar mass,布布扣,bubuko.com

时间: 2024-10-12 13:37:14

uva 1586 - Molar mass的相关文章

UVa 1586 Molar mass --- 水题

UVa 1586 题目大意:给出一种物质的分子式(不带括号),求分子量.本题中分子式只包含4种原子,分别为C.H.O.N, 原子量分别为12.01,1.008,16.00,14.01 解题思路:先实现一个从字符型的数到整型的数的转换函数,再将输入的串从头到尾扫描,遇到字母,则进一步扫描后面的数字的区间, 再调用函数进行转换,再乘以其的原子质量,最后累加到sum中即可. /* UVa 1586 Molar mass --- 水题 */ #include <cstdio> #include <

UVA 1586 Molar Mass (c++)(字符串处理)(模拟)

题目大意就是给一个只含有C/H/O/N四个字母的分子式,求分子量.跟着题目意思来进行模拟就好了.重点与难点在于如何处理字母后一位数字以上的数字.写得略显繁杂. #include <iostream> #include <string> #include <cstdio> #include <cstring> #define maxn 1000000+10 #include <ctype.h> using namespace std ; doubl

(UVA)1586 --Molar Mass(分子量)

题目链接:http://vjudge.net/problem/UVA-1586 思路:统计一个分子式中CHON出现的总次数,乘上相对原子量后求和.要注意的是CH4这样的C后面的1默认不出现,以及C4H10这样的后面的数字是两位的情况. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 int main() 7 { 8 int t,len; 9

UVa 1586 / UVALive 3900 Molar mass (字符串)

Molar mass Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description An organic compound is any member of a large class of chemical compounds whose molecules contain carbon. The molar mass of an organic compo

【OI】计算分子量 Molar mass UVa 1586 题解

题目:(由于UVa注册不了,还是用vjudge) https://vjudge.net/problem/UVA-1586 详细说明放在了注释里面.原创. 破题点在于对于一个元素的组合(元素+个数),只有3种可能: 1.单个元素 2.一个元素和一位数字 3.一个元素和两位数字 没有了.因为题设交代了n<=99,表明个数只能为2位数.分别判断即可. /* Copyright 2019 AlexanderZ.Tang Molar_mass.cpp For UVa 1586 https://cnblog

UVA1586 UVALive3900 Molar mass

Regionals 2007 >> Asia - Seoul 问题链接:UVA1586 UVALive3900 Molar mass.基础练习题,用C++语言编写程序. 这个问题是根据分子式,求分子量. 原子量使用map表来存储,所以用C++来编程. 程序中,使用函数getchar()处理输入流,需要更高的编程技巧. AC的C++语言程序如下: /* UVA1586 UVALive3900 Molar mass */ #include <iostream> #include <

UVA 580 - Critical Mass(DP)

题目链接:580 - Critical Mass 题意:一个栈,里面可以放L和U,有三个连续的U就是不安全的,问共有几种不安全的情况 思路:dp,dp[i][j][k],表示放到第i个,最后两个状态为j,k表示有没有出现不安全.然后去记忆化搜索一下就可以了 然后还有一种做法是,先考虑安全的情况,在用总情况(1<<n 种)减去安全的情况,安全的情况的递推方式很容易dp[i]表示放第i个, dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]. 不过这题都没给数据范围

【UVA】580-Critical Mass

根据递推公式计算,需要打表不然可能会超时. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<vector> #include<stack> #include<queue> #include<map> #include<set> #include<list> #includ

分子量 UVA 1586

3900 - Molar mass Asia - Seoul - 2007/2008 An organic compound is any member of a large class of chemical compounds whose molecules contain carbon. The molar mass of an organic compound is the mass of one mole of the organic compound. The molar mass