UVa 1586 - Molar mass(刷紫书)

题意按照分子式求有机物摩尔质量
思路:输入放入myinput数组,把所有原子质量放入a数组,把原子个数放入b数组.最后a、b数组相同下标相乘。

为解决这个问题,先设有一个函数,可以把原子个数放入b数组。

(1)先写出主函数

(2)解决把原子个数放入b数组这个问题。

注意:不要乱写i有可能会跳过输入的数据,所以用变量now。


#include<stdio.h>
#include<string.h>
#define maxn 1100
int fun(char myinput[],int b[])
{
    int sum=0;
    int j=0;
    int n=strlen(myinput);
    for(int i=0;i<n;i++){
        sum=0;
        if(myinput[i]=='C') j=0;
        else if(myinput[i]=='H') j=1;
        else if(myinput[i]=='O') j=2;
        else if(myinput[i]=='N') j=3;
        if ((myinput[i]<'0'||myinput[i]>'9')&&(myinput[i+1] < '0' || myinput[i+1] > '9'))
            sum+=1;
        if(myinput[i]>='C'&&myinput[i]<='O'){
            int now=i+1;
            while(myinput[now]>='0'&&myinput[now]<='9')
                sum=sum*10+(myinput[now++]-'0');
        }
        b[j]+=sum;
    }
    return 0;
}
int main()
{
    double a[4]={12.01,1.008,16.00,14.01};
    char myinput[maxn];
    int b[4];
    int T;
    scanf("%d",&T);
    while(T--){
        double sum=0;
        int ssum=0;
        memset(myinput,0,sizeof(myinput));
        memset(b,0,sizeof(b));
        scanf("%s",&myinput);
        fun(myinput,b);
        for(int i=0;i<4;i++)
            sum+=(a[i]*b[i]);
        printf("%.3lf\n",sum);
    }
    return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章