(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     double c,h,o,n;
10     char s[80];
11     scanf("%d",&t);
12     while(t--)
13     {
14         scanf("%s",s);
15         len = strlen(s);
16         int i=0,num=0;
17         c=0; h=0; o=0; n=0;
18         while(i<len)
19         {
20             if(s[i]>=‘A‘&&s[i]<=‘Z‘)
21             {
22                 if (s[i+1]>=‘0‘&&s[i+1]<=‘9‘)
23                 {
24                 num=num*10+s[i+1]-‘0‘;
25                 if (s[i+2]>=‘0‘&&s[i+2]<=‘9‘)
26                     num=num*10+s[i+2]-‘0‘;
27                 }else num=1;
28             if(s[i]==‘C‘) c+=num;
29             if(s[i]==‘H‘) h+=num;
30             if(s[i]==‘O‘) o+=num;
31             if(s[i]==‘N‘) n+=num;
32             num=0;
33             }
34             i++;
35         }
36         printf("%.3lf\n",c*12.01+h*1.008+o*16.00+n*14.01);
37     }
38     return 0;
39 }

时间: 2024-11-10 11:35:33

(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

在想更好的处理方法,现在却只能有这个糟烂的代码了--不好意思 #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

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

【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

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

分子量 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 

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