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

C语言-光伏MPPT算法:电导增量法扰动观察法+自动全局搜索Plecs最大功率跟踪算法仿真内容概要:本文档主要介绍了一种基于C语言实现的光伏最大功率点跟踪(MPPT)算法,结合电导增量法与扰动观察法,并引入自动全局搜索策略,利用Plecs仿真工具对算法进行建模与仿真验证。文档重点阐述了两种经典MPPT算法的原理、优缺点及其在不同光照和温度条件下的动态响应特性,同时提出一种改进的复合控制策略以提升系统在复杂环境下的跟踪精度与稳定性。通过仿真结果对比分析,验证了所提方法在快速性和准确性方面的优势,适用于光伏发电系统的高效能量转换控制。; 适合人群:具备一定C语言编程基础和电力电子知识背景,从事光伏系统开发、嵌入式控制或新能源技术研发的工程师及高校研究人员;工作年限1-3年的初级至中级研发人员尤为适合。; 使用场景及目标:①掌握电导增量法与扰动观察法在实际光伏系统中的实现机制与切换逻辑;②学习如何在Plecs中搭建MPPT控制系统仿真模型;③实现自动全局搜索以避免传统算法陷入局部峰值问题,提升复杂工况下的最大功率追踪效率;④为光伏逆变器或太阳能充电控制器的算法开发提供技术参考与实现范例。; 阅读建议:建议读者结合文中提供的C语言算法逻辑与Plecs仿真模型同步学习,重点关注算法判断条件、步长调节策略及仿真参数设置。在理解基本原理的基础上,可通过修改光照强度、温度变化曲线等外部扰动因素,进一步测试算法鲁棒性,并尝试将其移植到实际嵌入式平台进行实验验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值