HHUOJ_1351: 相对分子质量
HHUOJ_1351: 相对分子质量
题目描述
小明最近迷上了化学,几乎天天在实验室做实验,但是很多实验生成的化学产物的相对分子质量令他很困惑,不知如何计算,请你编程帮他计算。
输入
输入的第一行是一个正整数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、H、O、N四个元素,坑爹的是题目数据给的每个原子量都是个位数的情况,我记得第一次写时直接判断后面那一位是不是数字isdigit();
(原谅我的蠢\笑哭),并没有考虑如果原子数是多位的情况,第二次才AC,有了上次的经验,这次直接AC!
代码
#include <iostream>
#include <cstring>
using namespace std;int main(){int n;cin>>n;while(n--){char s[110];cin>>s;int sum = 0;//总质量int cnt = 0;//原子个数 int len = strlen(s);for(int i=0; i<len; ){cnt = 0;if(s[i] == 'H'){if(!isdigit(s[i+1])){sum += 1;i++;}else {while(isdigit(s[i+1])){cnt = cnt*10 + (s[i+1]-'0');i++;}i++;sum += cnt*1;}}else if(s[i] == 'C'){if(!isdigit(s[i+1])){sum += 12;i++;}else {while(isdigit(s[i+1])){cnt = cnt*10 + (s[i+1]-'0');i++;}i++;sum += cnt*12;}}else if(s[i] == 'N'){if(!isdigit(s[i+1])){sum += 14;i++;}else {while(isdigit(s[i+1])){cnt = cnt*10 + (s[i+1]-'0');i++;}i++;sum += cnt*14;}}else if(s[i] == 'O'){if(!isdigit(s[i+1])){sum += 16;i++;}else {while(isdigit(s[i+1])){cnt = cnt*10 + (s[i+1]-'0');i++;}i++;sum += cnt*16;}}else if(s[i] == 'F'){if(!isdigit(s[i+1])){sum += 19;i++;}else {while(isdigit(s[i+1])){cnt = cnt*10 + (s[i+1]-'0');i++;}i++;sum += cnt*19;}}else if(s[i] == 'P'){if(!isdigit(s[i+1])){sum += 31;i++;}else {while(isdigit(s[i+1])){cnt = cnt*10 + (s[i+1]-'0');i++;}i++;sum += cnt*31;}}else if(s[i] == 'S'){if(!isdigit(s[i+1])){sum += 32;i++;}else {while(isdigit(s[i+1])){cnt = cnt*10 + (s[i+1]-'0');i++;}i++;sum += cnt*32;}}else if(s[i] == 'K'){if(!isdigit(s[i+1])){sum += 39;i++;}else {while(isdigit(s[i+1])){cnt = cnt*10 + (s[i+1]-'0');i++;}i++;sum += cnt*39;}}}cout<<sum<<endl;}return 0;
}
虽然是AC了,但总觉得代码很冗余,希望大佬能给出更优解~
HHUOJ_1351: 相对分子质量相关推荐
- Molecular weight相对分子质量
Molecular weight相对分子质量 时间限制: 1 Sec 内存限制: 128 MB 提交: 12 解决: 6 [提交][状态][讨论版][Edit] [TestData] 题目描述 小 ...
- 「化学」相对分子质量
题目描述 做化学题时,小 F 总是里算错相对分子质量,这让他非常苦恼. 小 F 找到了你,请你来帮他算一算给定物质的相对分子质量. 如果你没有学过相关内容也没有关系,你可以从样例和提示里理解该题所求内 ...
- 字符串水题——相对分子质量
问题 G: 相对分子质量 时间限制: 1 Sec 内存限制: 32 MB 提交: 5 解决: 5 [提交][状态][讨论版] 题目描述 小明最近迷上了化学,几乎天天在实验室做实验,但是很多实验生成 ...
- C语言求CHO的相对分子质量
已知氢的原子量为1,碳的原子量为12,氧的原子量为16,输入化学结构式/分子式,计算对应的分子量(分子的数量小于10) 例如:乙酸(醋酸)的分子式为CH3COOH,分子量为12+1×3+12+16+1 ...
- 四磺基铝酞菁(AlS4 Pc),酞青铜相对分子质量,齐岳生物供应
四磺基铝酞菁(AlS4 Pc),酞青铜相对分子质量,齐岳生物酞菁材料供应 酞菁是由四个异吲哚单元组成的平面大环共轭体系.与卟啉一样,酞菁因为其特有的18电子共轭大环体系符合休特尔规则而具有芳香性.下图 ...
- 使用Python计算化学式的相对分子质量
受到邀请来帮同学计算其所采用的化学式的相对分子质量.本文详细介绍了如何识别化学式内元素,并对其化学式相对分子质量进行计算的过程. 输入化学式 在输入化学式的时候,需要将化学式中每个元素的个数进行表明. ...
- C语言 求分子式的分子质量
要求:1:不带括号的分子式求解 2:带一层括号的分子式求解 不带括号的分子式 用high和low记住每次扫描的最高位和最低位,不能求解多为整数时的系数 # include<stdio.h> ...
- 【洛谷】【模拟+栈】P4711 「化学」相对分子质量
[题目传送门:] [戳] (https://www.luogu.org/problemnew/show/P4711) [算法分析:] 关于一个分子拆分后的产物,一共有三种情况: 原子 原子团 水合物 ...
- P4711 「化学」相对分子质量
月赛的经典模拟题 模拟水题调到要死,但是还是能1A,还是很爽的. 这道题可以直接用scanf读入一行,用fgets会读入一个'\n',我不喜欢. 然后用一个变量从左到右扫一遍. 如果读到了大写字母,那 ...
最新文章
- HarmonyOS ToastDialog 的使用
- 在全局中谋一域_谋全局才能谋一域
- TensorFlow学习笔记之三(神经网络的优化)
- 关于细分到字段的权限系统_操作系统中的细分
- 2.1 使用ARDUINO控制MC20打电话
- linux压缩和备份工具
- paip.java 架构师之路以及java高级技术
- 计算机打印机驱动f4200,惠普HP Deskjet F4238 多功能一体机驱动惠普HP Deskjet F4238 多功能一体机驱动...
- express静态文件
- element中navMenu结合路由使用
- 如何快速的了解某种数据库
- 【无关技术·朋友圈朝花朝拾】月相
- java map集合详解_JAVA干货:Map 集合详解
- 伯禹公益AI《动手学深度学习PyTorch版》Task 06 学习笔记
- MFC 绘制半透明图片
- 计算机网络实验报告一
- Java学习26--------冒泡排序
- 产品思考 - 免费移动宽带自带魔百和的烦恼
- 多项式轨迹--五次多项式轨迹
- 实得打印机色带芯更换
热门文章
- SAP PS 第八节 PS 常见问题处理-来源于SAP EPPM分享
- vmware虚拟机无法u盘启动的解决办法
- 美颜滤镜sdk是什么?
- [单片机框架][bsp层][cx32l003][bsp_adc] ADC配置和使用
- C语言基础向——二级总结
- Python获取指定时间范围内的工作日、假日日、法定节假日
- WebAPI第五天学习总结—— 移动端常见特效(轮播图)
- 2020年 - 年终总结
- 查询天气的接口api收集总结
- TypeError: __init__()的问题