分子量 UVA 1586

  1. 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 of an organic compound can be computed from the standard atomic weights of the elements.When an organic compound is given as a molecular formula, Dr. CHON wants to find its molar mass. A molecular formula, such as C 3 H 4 O 3, identifies each constituent element by its chemical symbol and indicates

the number of atoms of each element found in each discrete molecule of that compound. If a molecule contains more than one atom of a particular element, this quantity is indicated using a subscript after the chemical symbol. In this problem, we assume that the molecular formula is represented by only four elements, `C‘ (Carbon), `H‘(Hydrogen), `O‘ (Oxygen), and`N‘ (Nitrogen) without parentheses.The following table shows that the standard atomic weights for `C‘, `H‘, `O‘, and`N‘.For example, the molar mass of a molecular formula

C6H5OHis 94.108 g/mol which is computed by 6 ×(12.01 g/mol) + 6 × (1.008 g/mol) + 1 × (16.00 g/mol).Given a molecular formula, write a program to compute the molar mass of the formula.

Input 

Your program is to read from standard input. The input consists of T test cases. The number of test cases T is given in the first line of the input. Each test case is given in a single line, which contains a molecular formula as a string. The chemical symbol is given by a capital letter and the length of the string is greater than 0 and less than 80. The quantity number n

which is represented after the chemical symbol would be omitted when the number is 1 (2n99) .

Output 

Your program is to write to standard output. Print exactly one line for each test case. The line should contain the molar mass of the given molecular formula.

Sample Input 

4

C

C6H5OH

NH2CH2COOH

C12H22O11

Sample Output 

12.010

94.108

75.070

342.296

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     int n,i,j,chang,k;
 6     double sum=0;
 7     char c[85];
 8     scanf("%d",&n);
 9     while(n--){
10     sum=0;
11     memset(c,0,sizeof(c));
12     scanf("%s",&c);
13     chang=strlen(c);
14     for(i=0;i<chang;i++)
15     {
16         if(c[i]==‘C‘)
17         {
18             if((c[i+2]>=‘1‘)&&(c[i+2]<=‘9‘)&&(c[i+1]>=‘0‘)&&(c[i+1]<=‘9‘))
19             {
20                 k=c[i+2]-‘0‘+(c[i+1]-‘0‘)*10;
21                 i=i+2;
22             }
23             else if((c[i+1]>=‘1‘)&&(c[i+1]<=‘9‘))
24             {
25                 k=c[i+1]-‘0‘;
26                 i=i+1;
27             }
28             else
29                 k=1;
30             sum+=12.01*k;
31         }
32         else if(c[i]==‘H‘)
33         {
34             if((c[i+2]>=‘1‘)&&(c[i+2]<=‘9‘)&&(c[i+1]>=‘0‘)&&(c[i+1]<=‘9‘))
35             {
36                 k=c[i+2]-‘0‘+(c[i+1]-‘0‘)*10;
37                 i=i+2;
38             }
39             else if((c[i+1]>=‘1‘)&&(c[i+1]<=‘9‘))
40             {
41                 k=c[i+1]-‘0‘;
42                 i=i+1;
43             }
44             else
45                 k=1;
46             sum+=1.008*k;
47         }
48         else if(c[i]==‘O‘)
49         {
50             if((c[i+2]>=‘1‘)&&(c[i+2]<=‘9‘)&&(c[i+1]>=‘0‘)&&(c[i+1]<=‘9‘))
51             {
52                 k=c[i+2]-‘0‘+(c[i+1]-‘0‘)*10;
53                 i=i+2;
54             }
55             else if((c[i+1]>=‘1‘)&&(c[i+1]<=‘9‘))
56             {
57                 k=c[i+1]-‘0‘;
58                 i=i+1;
59             }
60             else
61                 k=1;
62             sum+=16.00*k;
63         }
64         else if(c[i]==‘N‘)
65         {
66             if((c[i+2]>=‘1‘)&&(c[i+2]<=‘9‘)&&(c[i+1]>=‘0‘)&&(c[i+1]<=‘9‘))
67             {
68                 k=c[i+2]-‘0‘+(c[i+1]-‘0‘)*10;
69                 i=i+2;
70             }
71             else if((c[i+1]>=‘1‘)&&(c[i+1]<=‘9‘))
72             {
73                 k=c[i+1]-‘0‘;
74                 i=i+1;
75             }
76             else
77                 k=1;
78             sum+=14.01*k;
79         }
80         else
81             continue;
82     }
83     printf("%.3lf\n",sum);
84     }
85 }
时间: 2024-11-05 21:54:21

分子量 UVA 1586的相关文章

【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 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

分子量 (Molar Mass,ACM/ICPC Seoul 2007,UVa 1586)

解题思路: 1.将分子量用double 数组记录下来 2.将字符串存储在字符数组中,从头向后扫描,一直记住“字母”,对下一个字符进行判断,是否是数字,如果是数字:用一个整数记录,本代码中用的sum,同时下标++. 进行判断,查看是否对数字进行了记录,即查看sum是否进入了while循环并被赋值,如果没有被赋值,说明下一个字符不是数字,直接对W(总记录)值进行赋值,为当前字符的权值(分子量),即double数组的中的值.如果被赋值,说明字符后面是一个数字,sum中存放了该“数字”,也是对w赋值,不

分子量(Molar Mass,ACM/ICPC Seoul 2007,UVa 1586)

#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){ char s[20]; scanf("%s", s); double sum = 0; for (int i = 0; i < strlen(s); i++) { if (s[i] == 'C') sum += (s[i + 1] - 48) * 12.01; if (s[i] == 'H') { if (s[i +

uva 1586 分子量 uva 1584 字典序最小

1 #include<cstdio> 2 #include<cstring> 3 #include<cstdlib> 4 #include<iostream> 5 #include<algorithm> 6 #include<map> 7 8 using namespace std; 9 10 int N; 11 12 map <char,double> ar; 13 14 int main(){ 15 ar['C'] =

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 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】Ancient Cipher

题 题意 给你一个只含CHON的有机物的化学式如C6H5OH求相对分子质量 分析 ... 代码 #include<stdio.h> #include<cstring> #include<cctype> #define ll long long using namespace std; ll t; double w,m[5]= {12.01,1.008,16.00,14.01}; char s[100]; void add(int f,int i) { if(isdigi