Luogu4711「化学」相对分子质量

相对分子质量 c编程 (c编程 相对分子质量 )第三题 问题 E: 相对分子质量 题目描述 小明最近迷上了化学,几乎天天在实验室做实验,但是很多实验生成的化学产物的相对分子质量令他很困惑,不知如何计算,请你编程帮他计算。 输入 输入的第一行是一个正整数n,表示有n组测试数据。 接下来n行每行输入一个字符串,表示某个分子式,分子式中只包含大写字母和数字。 注意: 输入数据只包含8种元素,而这8种元素的相对原子质量如下: ... 阅读详情

原题链接:https://www.luogu.org/problemnew/show/P4711

「化学」相对分子质量

题目过水,题面过长不想搬运系列。。。

dark d a r k ♂模拟即可 AC A C :

先打表,元素最多两个字符,第一个大写,第二个小写,遇到大写直接特判下一个。

下划线+花括号的格式也很单一,很容易判断,用快读把花括号里的数读出来即可。

由于没有括号嵌套,遇到括号直接拉出来算。

后面必定是结晶水,只读数字就行了,注意判断没有数字的情况。

成功水完一篇博客。

代码
#include<bits/stdc++.h>
#define db double
using namespace std;
const int M=105,p=255;
char ch[M],tmp[M],sta[M],che[M];
db m[p*p*2],ans;
int hash(char c[],int l){return l>1?c[0]*p+c[1]:c[0]*p;}
void in(){scanf("%s",ch);}
void pre()
{
    m[hash("H",1)]=1;m[hash("C",1)]=12;m[hash("N",1)]=14;m[hash("O",1)]=16;m[hash("F",1)]=19;m[hash("Na",2)]=23;m[hash("Mg",2)]=24;
    m[hash("Al",2)]=27; m[hash("Si",2)]=28;m[hash("P",1)]=31;m[hash("S",1)]=32;m[hash("Cl",2)]=35.5;m[hash("K",1)]=39;
    m[hash("Ca",2)]=40;m[hash("Mn",2)]=55;m[hash("Fe",2)]=56;m[hash("Cu",2)]=64;m[hash("Zn",2)]=65;m[hash("Ag",2)]=108;
    m[hash("I",1)]=127; m[hash("Ba",2)]=137;m[hash("Hf",2)]=178.5;m[hash("Pt",2)]=195;m[hash("Au",2)]=197;m[hash("Hg",2)]=201;
}
db calc(int le,int ri,char x[])
{
    int p1,p2,xi;
    db r=0;
    for(int i=le;i<=ri;++i)
    {
        if(isupper(x[i]))
        {
            p1=i;che[0]=x[i];
            if(islower(x[i+1])){che[1]=x[i+1];p1=i+1;}
            if(x[p1+1]=='_')
            {
                xi=0;p2=p1;
                while(!isdigit(ch[p2]))++p2;
                while(isdigit(ch[p2]))xi=xi*10+ch[p2]-'0',++p2;
            }
            else xi=1;
            r+=m[hash(che,p1-i+1)]*xi;
        }
    }
    return r;
}
void ac()
{
    pre();int len=strlen(ch);
    int p1,xi,top=0,a;
    bool flag=0;db r;
    for(int i=0;i<len;++i)
    {
        if(ch[i]=='~'){flag=1,p1=i+1;break;}
        if(ch[i]=='(')
        {
            p1=i+1;
            while(ch[i]!=')')tmp[++i]=ch[i];
            r=calc(p1,i-1,tmp);
            if(ch[i+1]=='_')
            {
                xi=0;p1=i+1;
                while(!isdigit(ch[p1]))++p1;
                while(isdigit(ch[p1]))xi=xi*10+ch[p1]-'0',++p1;
            }
            else xi=1;
            ans+=r*xi;i=p1;
        }
        else sta[++top]=ch[i];
    }
    ans+=calc(1,top,sta);
    if(flag)
    {
        xi=0;
        while(isdigit(ch[p1]))xi=xi*10+ch[p1]-'0',++p1;
        if(!xi)xi=1;ans+=xi*18;
    }
    a=abs(ans);
    if(ans>a)printf("%d.5",a);
    else printf("%d",a);
}
int main(){in();ac();}
HHUOJ_1351: 相对分子质量 HHUOJ_1351: 相对分子质量题目描述小明最近迷上了化学,几乎天天在实验室做实验,但是很多实验生成的化学产物的相对分子质量令他很困惑,不知如何计算,请你编程帮他计算。输入输入的第一行是一个正整数n,表示有n组测试数据。 接下来n行每行输入一个字符串,表示某个分子式,分子式中只包含大写字母和数字。 注意: 输入数据只包含8种元素,而这8种元素的相对原子质量如下: H(1),C(12),N 阅读详情

相关推荐

作业2_括号匹配检测(C语言班)

2、假设一个算术表达式中可以包含三种括号:园括号“(”和“)”、方括号“[”和“]”、花括号“{”和“}”,且这三种括号可按任意的次序嵌套使用。编写判别给定表达式中所含括号是否正确配对出现的算法(已知表达式已存入数据元素为字符的顺序表中)。要求:顺序栈存储;实现顺序栈的基本操作;调用基本操作完成。

洛谷P4711 【化学】 相对分子质量 简单题解

【化学】 相对分子质量 简单题解思路代码 本蒟蒻写的第一道大模拟题(我们机房某巨佬说是中模拟) 我:“ A了这道题,妈妈再也不同担心我算不对相对分子质量啦~ ” 思路 做这种模拟题时,需要一个明确的思路和分块意识。 我们在开始之前,先来研究一下这些化学式。 这些化学式,由小括号,大括号,下划线,数字,化学元素组成。 看到这些,是不是觉得无从下手?是不是尝试去实现了但是实现不了? 别着急,慢慢来。 我们先讨论单个的元素。eg:Ag,CuAg,CuAg,Cu 对于单个的元素,我们只需要预先将这些元素与他们的相对

qq_54173335的博客 515

RuoYi项目适配达梦数据库(二)

RuoYi项目,代码生成模块的达梦数据库适配。

邢慧鹏的博客 1万+

【luogu P4711 「化学」相对分子质量】 题解

题目链接:https://www.luogu.org/problemnew/show/P4711 要细心模拟 #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <iostream> using namespace...

255

DS18B20温度传感器项目实战:从驱动编写到LCD显示,打造你的第一个温控系统

本文详细介绍了如何使用DS18B20温度传感器和LCD1602显示屏构建一个完整的温控系统。从硬件连接、OneWire协议实现到温度数据采集与LCD显示,全面解析了系统整合与工程化实现的关键步骤,帮助开发者快速掌握嵌入式温度监测系统的开发技巧。

weixin_42525328的博客 349

傅里叶变换实战:用Python手把手教你分析音频频谱(附完整代码)

本文详细介绍了如何使用Python实现傅里叶变换进行音频频谱分析,涵盖音频加载、预处理、FFT应用、频谱可视化及特征提取等关键步骤。通过实战案例和完整代码,帮助开发者掌握数字信号处理技术,特别适合音频分析和音乐信息检索领域的应用。

weixin_29090677的博客 150

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

输入输入的第一行是一个正整数n,表示有n组测试数据。接下来n行每行输入一个字符串,表示某个分子式,分子式中只包含大写字母和数字。注意:输入数据只包含8种元素,而这8种元素的相对原子质量如下:输出对于每组输入,输出相对分子质量。样例输入4H2OKOHCH4SO2样例输出18561664。

学习指针路上的小学渣的博客 329

一文告诉你:如何在trae中编译运行STM32程序,并让AI帮你修改代码

本文详细介绍了如何将STM32程序从Keil迁移到国产免费工具Trae,并利用AI进行代码修改的全过程。

水滴爬呀爬 4894

相对分子质量

题目描述 小明最近迷上了化学,几乎天天在实验室做实验,但是很多实验生成的化学产物的相对分子质量令他很困惑,不知如何计算,请你编程帮他计算。 输入 输入的第一行是一个正整数n,表示有n组测试数据。 接下来n行每行输入一个字符串,表示某个分子式,分子式中只包含大写字母和数字。 注意:每个分子式长度没超过20.输入数据只包含8种元素,而这8种元素的相对原子质量如下: H(1),C(12),N(14),O...

G191018的博客 1039

【25届数字IC秋招总结】面试经验10——紫光同芯

25届数字ic面试记录——紫光同芯

lalala0635的博客 863

【ArcGIS Pro微课1000例】0023:ArcGIS Pro 3.0中打开GeoPackage数据库(.gpkg)

本文讲解ArcGIS Pro 3.0中打开GeoPackage数据库(.gpkg)的两种方法。

智慧空间实验室 4648

luogu4711 「化学」相对分子质量

http://www.elijahqi.win/archives/3808 恶心模拟 #include&lt;bits/stdc++.h&gt; using namespace std; map&lt;string,double&gt; MM; inline void init(){ string A="H";MM[A]=1; A="C";MM[A]=12; A="N"...

Elijahqi 771

【LOGO动态替换】记录一次关于LOGO动态替换引发的uboot代码分析及其实现

文章目录1.前言2.实现2.1 新增logo分区2.2 制作logo分区镜像2.2.1 查看logo.bmp和logo_kernel.bmp的文件大小。2.2.2 按规则将bmp写入logo.img3.分析3.1 uboot的启动分析3.2 uboot bmp load 显示部分3.2.1 rockchip_show_logo3.2.2 load_bmp_logo3.2.3 load_bmp_logo3.3 uboot bmp read部分3.3.1 read_logo_bmps3.3.1 read_bmp

wang 恒 的博客 1214

Luogu4711 「化学」相对分子质量

模拟题,写一些比较细节的东西的时候多考虑一下就行了 感觉分各种函数写还是很爽的 注意一些可能需要特判的情况细节 比如说为了偷懒把 char_to_int 写成了读优的形式虽然可以少写几个 ++ptr 但是在它没有数字的时候就一路找下去了挺显然的 bug 其实 代码: #include <algorithm> #include <iostream&gt...

weixin_30279671的博客 99

基于Simulink的加速度计振动分析:单自由度质量-弹簧-阻尼系统

摘要:基于Simulink的加速度计单自由度振动分析 本文研究了加速度计的单自由度(SDOF)质量-弹簧-阻尼系统模型,通过MATLAB/Simulink平台建立了完整的振动分析仿真系统。文章详细阐述了理论建模过程,推导了系统运动微分方程和传递函数,并提供了Simulink模型搭建的具体步骤和MATLAB实现代码。研究通过正弦扫频、随机振动和冲击响应三种典型输入信号,分析了系统的幅频特性、相频特性及时域响应,验证了加速度计的工作机理。仿真结果表明,该方法能有效模拟加速度计在不同激励条件下的动态特性,为传感器

AI的内部世界的博客 163

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

计算相对分子质量 --- 寒假作业(第三题)

题目描述 小明最近迷上了化学,几乎天天在实验室做实验,但是很多实验生成的化学产物的相对分子质量令他很困惑,不知如何计算,请你编程帮他计算。 输入 输入的第一行是一个正整数n,表示有n组测试数据。 接下来n行每行输入一个字符串,表示某个分子式,分子式中只包含大写字母和数字。 注意: 输入数据只包含8种元素,而这8种元素的相对原子质量如下: H(1),C(12),N(14),O(16),F(19...

qq_44075791的博客 2738

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

无坑水

1052:相对分子质量分数: 1 时间限制:1 秒 内存限制:32 兆 特殊判题: 否 提交:23 解决: 17 题目描述 小明最近迷上了化学,几乎天天在实验室做实验,但是很多实验生成的化学产物的相对分子质量令他很困惑,不知如何计算,请你编程帮他计算。 输入格式 输入的第一行是一个正整数n,表示有n组测试数据。 接下来n行每行

袁汉春 968

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

P4711 「化学」相对分子质量

月赛的经典模拟题 模拟水题调到要死,但是还是能1A,还是很爽的。 这道题可以直接用scanf读入一行,用fgets会读入一个'\n',我不喜欢。 然后用一个变量从左到右扫一遍。 如果读到了大写字母,那么你现在肯定在读一个元素的名称。判断是否有小写字母,名字完了之后判断是不是有下标数字。 读数字是一件挺频繁的工作,建议封装成函数,很爽。 有一个难点是原子团,不过不难发现:用括号括起来的原...

dianshu0741的博客 413

C++趣味实验之:使用简易代码计算化学式的相对分子质量

一个可以计算化学式分子量的简单小程序

weixin_61702409的博客 657

输入分子式,计算相对分子质量

#include&lt;stdio.h&gt; int t; int j=0; char *p; int function(char *string); int main() { int a[t]; char string[t][100]; printf("请按格式输入\n"); scanf("%d",&amp;t); for(int i=0;i&lt;t;i++){ scanf...

ChenxiLiylnf的博客 5048

C语言求CHO的相对分子质量

已知氢的原子量为1,碳的原子量为12,氧的原子量为16,输入化学结构式/分子式,计算对应的分子量(分子的数量小于10) 例如:乙酸(醋酸)的分子式为CH3COOH,分子量为12+1×3+12+16+16+1=60 输入 分子式/结构式,长度不超过30,在分子式/结构式中只有字母和数字, 其中的字母只会出现三个大写字母CHO,另外在数值之前必然有字母。 测试数据有多组,处理到输入结束。 输出 输出分子量(正整数),每个输出占1行。 样例输入 H2 C O2 CO2 H2O CH4 CH3CH2OH CH3CO

cxy_jbq的博客 987
上一篇: Luogu4711「物理」平抛运动
下一篇: Luogu4712「生物」能量流动
ShadyPi
博客等级 码龄9年 1万+粉丝 637原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShadyPi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值