zoukankan      html  css  js  c++  java
  • 8626 原子量计数

    8626 原子量计数

    时间限制:1000MS  内存限制:1000K
    提交次数:218 通过次数:89

    题型: 编程题   语言: G++;GCC

     

    Description

    给出一个化学原子式,仅含有C,H,O,N 四种元素,计算其总分子量。
    例如,C6H5OH 的原子量为94.108g/mol,计算方法为:
    6 × (12.01 g/mol) + 6 × (1.008 g/mol) +1 × (16.00 g/mol).
    




    输入格式

    输入的第一行是数字T,表示输入文件含有T个CASE。之后有T行,每行有一个长度小于100 的字符串,
    表示要求的分子式。原子都用大写字母表示,没有括号,保证所有的式子都合法。
    



    输出格式

    输出每个式子的原子量。



     

    输入样例

    4
    C
    C6H5OH
    NH2CH2COOH
    C12H22O11
    



     

    输出样例

    12.010
    94.108
    75.070
    342.296
    



     

    提示

    
    



     

    来源

     PKKJ @ 07 GIS 1 

     

    作者

     admin

      很简单的一道模拟题,代码不是很长,测试数据也并不坑人;直接上代码:

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 #include <math.h>
      5 
      6 //using namespace std;
      7 
      8 int main()
      9 {
     10     int T;
     11     char s[200];
     12     int i,j,k,c,o,h,n;
     13     scanf("%d
    ",&T);
     14     for(i=0; i<T; i++)
     15     {
     16         c=0;
     17         h=0;
     18         n=0;
     19         o=0;
     20         k=0;
     21         scanf("%s",s);
     22         int len=strlen(s);
     23         for(j=0; j<len; j++)
     24         {
     25             if(s[j]=='C')
     26             {
     27                 k=j+1; int temp=0;
     28                 if(s[k]>='0'&&s[k]<='9')
     29                     while(s[k]>='0'&&s[k]<='9')
     30                     {
     31                         if(k>j+1)
     32                             temp=temp*10+s[k]-'0';
     33                         else
     34                             temp+=s[k]-'0';
     35                         k++;
     36                     }
     37                 else
     38                     temp++;
     39                 c+=temp;
     40             }
     41 
     42             else if(s[j]=='O')
     43             {
     44                 k=j+1; int temp=0;
     45                 if(s[k]>='0'&&s[k]<='9')
     46                     while(s[k]>='0'&&s[k]<='9')
     47                     {
     48                         if(k>j+1)
     49                             temp=temp*10+s[k]-'0';
     50                         else
     51                             temp+=s[k]-'0';
     52                         k++;
     53                     }
     54                 else
     55                     temp++;
     56                 o+=temp;
     57 
     58             }
     59             else if(s[j]=='H')
     60             {
     61                 k=j+1;int temp=0;
     62                 if(s[k]>='0'&&s[k]<='9')
     63                     while(s[k]>='0'&&s[k]<='9')
     64                     {
     65                         if(k>j+1)
     66                             temp=temp*10+s[k]-'0';
     67                         else
     68                             temp+=s[k]-'0';
     69                         k++;
     70                     }
     71                 else
     72                     temp++;
     73                 h+=temp;
     74 
     75 
     76             }
     77             else if(s[j]=='N')
     78             {
     79                 k=j+1;int temp=0;
     80                 if(s[k]>='0'&&s[k]<='9')
     81                     while(s[k]>='0'&&s[k]<='9')
     82                     {
     83                         if(k>j+1)
     84                             temp=temp*10+s[k]-'0';
     85                         else
     86                             temp+=s[k]-'0';
     87                         k++;
     88                     }
     89                 else
     90                     temp++;
     91                 n+=temp;
     92 
     93 
     94             }
     95         }
     96         double sum_c=12.010,sum_h=1.008,sum_o=16.000,sum_n=14.010;
     97         double ans=c*sum_c+h*sum_h+o*sum_o+n*sum_n;
     98         printf("%.3lf
    ",ans);
     99     }
    100     return 0;
    101 }

    下面是另一种方法:

    #include <stdio.h>
    #include <string.h>
    int check(int temp[],int n);
    int digit(char a);
    int main()
    {
        int T;
        scanf("%d",&T);
        const double w_h=1.008,w_n=14.01,w_o=16.00,w_c=12.01;
        while(T--)
        {
            char a[105];
            int i,j,num_h=0,num_n=0,num_o=0,num_c=0;
            double sum=0;
            scanf("%s",a);
            int alen=strlen(a);
            //
            {
                int temp[20];
                for(i=0;i<alen;i++)
                {
                    if(a[i]=='H')
                    {
                        int n=0;
                        for(j=i+1;digit(a[j]);j++)
                        {
                            temp[n++]=a[j]-'0';
                        }
                        if(n==0)
                        {
                            n=1;
                            num_h+=n;
                        }
                        else
                        {
                            num_h+=check(temp,n);
                        }
                    }
                }
            }
            {
                int temp[20];
                for(i=0;i<alen;i++)
                {
                    if(a[i]=='N')
                    {
                        int n=0;
                        for(j=i+1;digit(a[j]);j++)
                        {
                            temp[n++]=a[j]-'0';
                        }
                        if(n==0)
                        {
                            n=1;
                            num_n+=n;
                        }
                        else
                        {
                            num_n+=check(temp,n);
                        }
                    }
                }
            }
            {
                int temp[20];
                for(i=0;i<alen;i++)
                {
                    if(a[i]=='O')
                    {
                        int n=0;
                        for(j=i+1;digit(a[j]);j++)
                        {
                            temp[n++]=a[j]-'0';
                        }
                        if(n==0)
                        {
                            n=1;
                            num_o+=n;
                        }
                        else
                        {
                            num_o+=check(temp,n);
                        }
                    }
                }
            }
            {
                int temp[20];
                for(i=0;i<alen;i++)
                {
                    if(a[i]=='C')
                    {
                        int n=0;
                        for(j=i+1;digit(a[j]);j++)
                        {
                            temp[n++]=a[j]-'0';
                        }
                        if(n==0)
                        {
                            n=1;
                            num_c+=n;
                        }
                        else
                        {
                            num_c+=check(temp,n);
                        }
                    }
                }
            }
            sum=num_h*w_h+num_c*w_c+num_n*w_n+num_o*w_o;
            printf("%.3lf
    ",sum);
    
        }
        return 0;
    }
    int check(int temp[],int n)
    {
        int i,sum=0,m=1;
        for(i=n-1;i>=0;i--)
        {
            sum+=temp[i]*m;
            m*=10;
        }
        return sum;
    }
    int digit(char a)
    {
        if(a<='9'&&a>='0')
            return 1;
        else return 0;
    }
    

      

  • 相关阅读:
    《构建之法》第1.2.3章读后感
    回顾并总结关于复利计算器的三次实验
    实验0、了解和熟悉操作系统实验
    0302思考并回答一些问题
    递归下降语法分析程序设计
    1203有穷自动机的构造与识别
    评论集锦
    C语言文法定义与C程序的推导过程
    Vue简介教程(四)[自定义指令 | 路由 | 过渡 & 动画]
    Vue简介教程(三)[事件处理 | 表单 | 组件]
  • 原文地址:https://www.cnblogs.com/geek1116/p/5222452.html
Copyright © 2011-2022 走看看