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: 相对分子质量相关推荐

  1. Molecular weight相对分子质量

    Molecular weight相对分子质量 时间限制: 1 Sec  内存限制: 128 MB 提交: 12  解决: 6 [提交][状态][讨论版][Edit] [TestData] 题目描述 小 ...

  2. 「化学」相对分子质量

    题目描述 做化学题时,小 F 总是里算错相对分子质量,这让他非常苦恼. 小 F 找到了你,请你来帮他算一算给定物质的相对分子质量. 如果你没有学过相关内容也没有关系,你可以从样例和提示里理解该题所求内 ...

  3. 字符串水题——相对分子质量

    问题 G: 相对分子质量 时间限制: 1 Sec  内存限制: 32 MB 提交: 5  解决: 5 [提交][状态][讨论版] 题目描述 小明最近迷上了化学,几乎天天在实验室做实验,但是很多实验生成 ...

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

    已知氢的原子量为1,碳的原子量为12,氧的原子量为16,输入化学结构式/分子式,计算对应的分子量(分子的数量小于10) 例如:乙酸(醋酸)的分子式为CH3COOH,分子量为12+1×3+12+16+1 ...

  5. 四磺基铝酞菁(AlS4 Pc),酞青铜相对分子质量,齐岳生物供应

    四磺基铝酞菁(AlS4 Pc),酞青铜相对分子质量,齐岳生物酞菁材料供应 酞菁是由四个异吲哚单元组成的平面大环共轭体系.与卟啉一样,酞菁因为其特有的18电子共轭大环体系符合休特尔规则而具有芳香性.下图 ...

  6. 使用Python计算化学式的相对分子质量

    受到邀请来帮同学计算其所采用的化学式的相对分子质量.本文详细介绍了如何识别化学式内元素,并对其化学式相对分子质量进行计算的过程. 输入化学式 在输入化学式的时候,需要将化学式中每个元素的个数进行表明. ...

  7. C语言 求分子式的分子质量

    要求:1:不带括号的分子式求解 2:带一层括号的分子式求解 不带括号的分子式 用high和low记住每次扫描的最高位和最低位,不能求解多为整数时的系数 # include<stdio.h> ...

  8. 【洛谷】【模拟+栈】P4711 「化学」相对分子质量

    [题目传送门:] [戳] (https://www.luogu.org/problemnew/show/P4711) [算法分析:] 关于一个分子拆分后的产物,一共有三种情况: 原子 原子团 水合物 ...

  9. P4711 「化学」相对分子质量

    月赛的经典模拟题 模拟水题调到要死,但是还是能1A,还是很爽的. 这道题可以直接用scanf读入一行,用fgets会读入一个'\n',我不喜欢. 然后用一个变量从左到右扫一遍. 如果读到了大写字母,那 ...

最新文章

  1. HarmonyOS ToastDialog 的使用
  2. 在全局中谋一域_谋全局才能谋一域
  3. TensorFlow学习笔记之三(神经网络的优化)
  4. 关于细分到字段的权限系统_操作系统中的细分
  5. 2.1 使用ARDUINO控制MC20打电话
  6. linux压缩和备份工具
  7. paip.java 架构师之路以及java高级技术
  8. 计算机打印机驱动f4200,惠普HP Deskjet F4238 多功能一体机驱动惠普HP Deskjet F4238 多功能一体机驱动...
  9. express静态文件
  10. element中navMenu结合路由使用
  11. 如何快速的了解某种数据库
  12. 【无关技术·朋友圈朝花朝拾】月相
  13. java map集合详解_JAVA干货:Map 集合详解
  14. 伯禹公益AI《动手学深度学习PyTorch版》Task 06 学习笔记
  15. MFC 绘制半透明图片
  16. 计算机网络实验报告一
  17. Java学习26--------冒泡排序
  18. 产品思考 - 免费移动宽带自带魔百和的烦恼
  19. 多项式轨迹--五次多项式轨迹
  20. 实得打印机色带芯更换

热门文章

  1. SAP PS 第八节 PS 常见问题处理-来源于SAP EPPM分享
  2. vmware虚拟机无法u盘启动的解决办法
  3. 美颜滤镜sdk是什么?
  4. [单片机框架][bsp层][cx32l003][bsp_adc] ADC配置和使用
  5. C语言基础向——二级总结
  6. Python获取指定时间范围内的工作日、假日日、法定节假日
  7. WebAPI第五天学习总结—— 移动端常见特效(轮播图)
  8. 2020年 - 年终总结
  9. 查询天气的接口api收集总结
  10. TypeError: __init__()的问题