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;
}



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