现在的位置: 首页 > 综合 > 正文

UVA 1586 分子量

2018年04月29日 ⁄ 综合 ⁄ 共 1858字 ⁄ 字号 评论关闭

     一道有关字符串处理i的题目,很普通,只要注意下一个元素后面的数字的统计就行了,因为题目数  2<N<99 所以只要判断出来他是一位数还是两位数就行了,

切记flag标记,一开始掉了flag==1的判断,调了10分钟,QAQ

这个是我一开始的错误代码,,还没出来~

 # include<cstdio>
# include<iostream>
# include<cstring>

using namespace std;

# define MAX 100

char s[MAX];

int main(void)
{
    int t;
    cin>>t;
    while ( t-- )
    {
        int k1 = 0;
        int k2 = 0;
        int k3 = 0;
        int k4 = 0;
       scanf("%s",s);
       int n = strlen(s);
       double sum = 0;
       for ( int i = 0;i < n;i++ )
       {
           if ( s[i] == 'C' )
                {
                    if ( (s[i+1]<='9'&&s[i+1]>='1') )
                        {
                            if (s[i+2]<='9'&&s[i+2]>='1')
                                {
                                    k1 = s[i+1]*10+s[i+2];
                                }
                                else
                                k1 = s[i+1];
                        }
                        else
                        k1 = 1;
                }

           if ( s[i] == 'H' )
           {
                if ( (s[i+1]<='9'&&s[i+1]>='1')&&(s[i+2]<='9'&&s[i+2]>='1') )
                        {
                            k2 = s[i+1]*10+s[i+2];
                        }
                        else if ( (s[i+1]<='9'&&s[i+1]>='1')&&(s[i+2]=='C'||s[i+2]=='O'
                                    ||s[i+2]=='N') )
                        {
                            k2 = s[i+1];
                        }
                        else
                        k2 = 1;
           }
           if ( s[i] == 'O' )
           {
                if ( (s[i+1]<='9'&&s[i+1]>='1')&&(s[i+2]<='9'&&s[i+2]>='2') )
                        {
                            k3 = s[i+1]*10+s[i+2];
                        }
                        else if ( (s[i+1]<='9'&&s[i+1]>='1')&&(s[i+2]=='H'||s[i+2]=='C'
                                    ||s[i+2]=='N') )
                        {
                            k3 = s[i+1];
                        }
                        else
                        k3 = 1;
           }
           if ( s[i] == 'N' )
           {
                if ( s[i+1]<='9'&&s[i+1]>='1'&&s[i+2]<='9'&&s[i+2]>='1' )
                        {
                            k4 = s[i+1]*10+s[i+2];
                        }
                        else if ( s[i+1]<='9'&&s[i+1]>='1'&&(s[i+2]=='H'||s[i+2]=='O'
                                    ||s[i+2]=='C') )
                        {
                            k4 = s[i+1];
                        }
                        else
                        k4 = 1;
           }

       }
       cout<<k1<<endl;
       cout<<k2<<endl;
       cout<<k3<<endl;
       cout<<k4<<endl;

       sum = k1*12.01+k2*1.008+k3*16.00+k4*14.01;

       printf("%.3lfg/mol\n",sum);

    }



    return 0;
}

重新打的:

# include<cstdio>
# include<iostream>
# include<cstring>


using namespace std;

# define MAX 100

char s[MAX+10];
double a[MAX+10];

int g ( int x,int y )
{
    int t;
    for ( int i = x;i < y;i++ )
        {
            if ( s[i] <= '9'&&s[i] >= '0' )
                t = i;
            else
                break;


        }
        int sum = 0;
        for ( int i = x;i <= t;i++ )
        {
            sum = sum*10+( s[i] - '0' );
        }
        return sum-1;
}


int main(void)
{
    int t;cin>>t;
    while ( t-- )
    {
        scanf("%s",s);
        int len = strlen(s);
        int flag = 0;
        for ( int i = 0;i < len;i++ )
        {
            if ( s[i] == 'C' )a[i] = 12.01;
            if ( s[i] == 'H' )a[i] = 1.008;
            if ( s[i] == 'O' )a[i] = 16.00;
            if ( s[i] == 'N' )a[i] = 14.01;
            if ( s[i] >= '1' && s[i] <= '9'&&flag == 0 )
            {//flag = 0一定要切记!,调了10分钟 QAQ
                flag = 1;
                a[i] = a[i-1]*g(i,len);
            }
            if ( !( s[i] >= '0'&&s[i] <= '9') )flag = 0;
        }
     double sum1 = 0;

    for ( int i = 0;i < len;i++ )
    {
        //cout<<a[i]<<endl;
        sum1+=a[i];
    }
    printf("%.3lf\n",sum1);

    }
    return 0;
}

【上篇】
【下篇】

抱歉!评论已关闭.