1039 - 相对分子质量

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

小明最近迷上了化学,几乎天天在实验室做实验,但是很多实验生成的化学产物的相对分子质量令他很困惑,不知如何计算,请你编程帮他计算。

题目输入

输入的第一行是一个正整数n,表示有n组测试数据。
接下来n行每行输入一个字符串,表示某个分子式,分子式中只包含大写字母和数字。
注意:
输入数据只包含8种元素,而这8种元素的相对原子质量如下:
H(1),C(12),N(14),O(16),F(19),P(31),S(32),K(39)。

题目输出

对于每组输入,输出相对分子质量。

输入/输出样例

输入格式

4
H2O
KOH
CH4
SO2

输出格式

18
56
16
64

C语言解答

#include<stdio.h>
#include<string.h>

int e[]={1,12,14,16,19,31,32,39};
char s[]="HCNOFPSK";

int main()
{
	int n,i,j,sum,c,k,t;
	char a[100];
	scanf("%d%*c",&n);
	while(n--)
	{
		gets(a);
		sum=0;
		for(i=0;i<strlen(a);i++)
		{
			k=0;
			t=i;
			for(j=0;j<8;j++)
			{
				if(a[i]==s[j])
					c=e[j];
			}
			while(a[i]>='0'&&a[i]<='9')
			{
				k=k*10+a[i]-'0';
				i++;
			}
			i=t;
			if(!k)
				sum+=c;
			else
				sum+=c*(k-1);
		}
		printf("%d\n",sum);
	}
	return 0;
}

C++解答

#include<stdio.h>
#include<string.h>

int e[]={1,12,14,16,19,31,32,39};
char s[]="HCNOFPSK";

int main()
{
	int n,i,j,sum,c,k,t;
	char a[100];
	scanf("%d%*c",&n);
	while(n--)
	{
		gets(a);
		sum=0;
		for(i=0;i<strlen(a);i++)
		{
			k=0;
			t=i;
			for(j=0;j<8;j++)
			{
				if(a[i]==s[j])
					c=e[j];
			}
			while(a[i]>='0'&&a[i]<='9')
			{
				k=k*10+a[i]-'0';
				i++;
			}
			i=t;
			if(!k)
				sum+=c;
			else
				sum+=c*(k-1);
		}
		printf("%d\n",sum);
	}
	return 0;
}

Java解答

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {

	public static void main(String[] args){
		Scanner in = new Scanner(System.in);
		int n = Integer.parseInt(in.nextLine());
		Map<Character, Integer> num = new HashMap<Character, Integer>();
		num.put('H', 1);
		num.put('C', 12);
		num.put('N', 14);
		num.put('O', 16);
		num.put('F', 19);
		num.put('P', 31);
		num.put('S', 32);
		num.put('K', 39);
		while(n-->0){
			String str = in.nextLine();
			char tem = 0;
			int out = 0;
			for(int i=0;i<str.length();i++){
				char c = str.charAt(i);
				if(c>'0' && c<='9'){
					if(tem != 0)out += num.get(tem)*(c-'1');
				}
				else{
					if(tem != 0)out += num.get(tem);
					tem = c;
				}
			}
			if(tem != 0)out += num.get(tem);
			System.out.println(out);
		}
	}
}

Python解答

# coding=utf-8
def zl(x):
    if x=="H":
        return 1
    elif x=="C":
        return 12
    elif x=="N":
        return 14
    elif x=="O":
        return 16
    elif x=="F":
        return 19
    elif x=="P":
        return 31
    elif x=="S":
        return 32
    elif x=="K":
        return 39
a=int(input())
for i in range(a):
    b=input()
    j=0
    n=0
    y=0
    while j!=len(b):
        if j==len(b)-1:
            if b[j]<"1" or b[j]>"9":
                n=n+zl(b[j])
        elif b[j]>="A" and b[j]<="Z" and (b[j+1]<"1" or b[j+1]>"9"):
            n=n+zl(b[j])
        elif b[j]>="A" and b[j]<="Z" and b[j+1]>="1" and b[j+1]<="9":
            y=int(b[j+1])#此处变量y不能省略,int(j+1)不能直接带入下一行计算公式
            n=n+zl(b[j])*y
        j+=1
    print(n)