Problem A: A.挑战密室

Problem A: A.挑战密室

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 53   Solved: 32
[ Submit][ Status][ Web Board]

Description

R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室。Dr. Kong必须尽快找到解锁密码逃离,否则几分钟之后,WTO密室即将爆炸。

 

Dr. Kong发现密室的墙上写了许多化学方程式中。化学方程式,也称为化学反应方程式,是化学式表示物质化学反应的式子。化学方程式反映的是客观事实。因此书写化学方程式要遵守两个原则:一是必须以客观事实为基础;二是要遵守质量守恒定律。

化学方程式不仅表明了反应物、生成物和反应条件。同时,化学计量数代表了各反应物、生成物物质的量关系,通过相对分子质量或相对原子质量还可以表示各物质之间的质量关系,即各物质之间的质量比。对于气体反应物、生成物,还可以直接通过化学计量数得出体积比。例如:2NaOH+H2SO4=Na2SO4+2H2O

 

经过多次试探、推理,Dr. Kong发现密码是4位数字,就隐藏在化学方程式等号后的第一个分子中,其分子量就可能是密码(若分子量不足4位,前面加0)。

好在Dr. Kong还记得墙上各化学方程式用到的化学元素的原子量如下:

 

N

C

O

Cl

S

H

Al

Ca

Zn

Na

14

12

16

35

32

2

27

40

65

23

 

你能帮Dr. Kong尽快找到密码吗?

约束条件

2≤K8  ,化学方程式的长度不超过50, 所有原子,分子的数量不超过9.小括号最多一层. 

Input

第一行:     表示有K个化学方程式;

接下来有K行,每行为一个化学方程式

Output

对于每个化学方程式输出一行:即密码。

Sample Input

3
2C+O2=2CO
2NaOH+H2SO4=Na2SO4+2H2O
Ca2CO3+H2O=Ca2(OH)2+CO2

Sample Output

0056
0142
0116

代码如下:
#include<iostream>
#include<map>
#include<stdio.h>
#include<string>
#include<cctype>
using namespace std;
int main()
{
    string str[10] = { "N","C","O","Cl","S","H","Al","Ca","Zn","Na" };
    int mass[10] =   {  14, 12, 16,  35, 32,  2,  27,  40,  65,  23 };
    map<string, int>mp;
    for (int p = 0; p < 10; p++)mp[str[p]] = mass[p];
    int n, sum;
    cin >> n;
    while (n--)
    {
        sum = 0;
        string s;
        cin >> s;
 
        int i, m = 1;
        for (i = 0; i < s.length() && s[i] != '='; i++);
 
        if (isdigit(s[i + 1]))m = s[++i] - '0';
 
        string t; 
        int flag = 0, tsum = 0;
        for (i = i + 1; i < s.length() && s[i] != '+'; i++)
        {
            if (s[i] == ')')
            {
                tsum += mp[t];
                t.clear();
                flag = 0;
            }
 
            if (flag == 1)
            {
                if (isdigit(s[i]))
                {
                    tsum += (s[i] - '0')*mp[t];
                    t.clear();
                }
                else if (isupper(s[i]))
                {
                    tsum += mp[t];
                    t.clear();
                }
 
                if (isalpha(s[i]))
                    t += s[i];
            }
            else
            {
                if (s[i] == '(')
                {
                    flag = 1;
                    tsum = 0;
                }
 
                if (isdigit(s[i]))
                {
                    if (tsum != 0)
                    {
                        sum += (s[i] - '0')*tsum;
                        tsum = 0;
                    }
                    else
                    {
                        sum += (s[i] - '0')*mp[t];
                        t.clear();
                    }
                }
                else if (isupper(s[i]))
                {
                    sum += mp[t];
                    t.clear();
                }
 
                if (isalpha(s[i]))
                    t += s[i];
            }
        }
        if (t.length())
        {
            sum += mp[t];
            t.clear();
        }
        printf("%04d\n", sum*m);
    }
 
    return 0;
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值