HHUOJ_1351: 相对分子质量
来源:互联网 发布:求免费数据恢复软件 编辑:程序博客网 时间:2024/04/28 15:07
HHUOJ_1351: 相对分子质量
题目描述
小明最近迷上了化学,几乎天天在实验室做实验,但是很多实验生成的化学产物的相对分子质量令他很困惑,不知如何计算,请你编程帮他计算。
输入
输入的第一行是一个正整数n,表示有n组测试数据。
接下来n行每行输入一个字符串,表示某个分子式,分子式中只包含大写字母和数字。
注意:
输入数据只包含8种元素,而这8种元素的相对原子质量如下:
H(1),C(12),N(14),O(16),F(19),P(31),S(32),K(39)。
输出
对于每组输入,输出相对分子质量。
样例输入
4H2OKOHCH4SO2
样例输出
18561664
思路
记得之前在看算法竞赛入门那本书时看到过跟这个类似的题目,那个题比较简单,只有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了,但总觉得代码很冗余,希望大佬能给出更优解~
阅读全文
0 0
- HHUOJ_1351: 相对分子质量
- 相对分子质量计算
- 相对分子质量
- 1052:相对分子质量
- 相对分子质量
- 相对分子质量
- Molecular weight相对分子质量
- UVA 1586 Molar mass(蛋白质的相对分子质量)
- 字符串水题——相对分子质量
- 分子公司
- 分子计算机
- 分子设计
- 极性分子
- 分子计算机
- 软件质量概述 3 不同质量保障技术的相对效能
- 分子计算:逻辑层
- 【其他】【RQNOJ】分子团
- 寻找“捣乱分子”对[
- 利用32位PEB结构实现从进程ID中得到进程完整路径
- mybatis和hibernate的区别
- 关于安装sublime text3 包管理器安装不上的问题
- 数据挖掘笔记
- 设计模式之总览
- HHUOJ_1351: 相对分子质量
- Java 序列化
- 直击Java程序员阿里5轮B2B面试现场:我是如何突出重围的
- Magento中的load()方法
- 莫烦PyTorch学习笔记(三)——分类
- C++重难点知识点总结
- DSS 代码分析【TaskThread与Task】
- 常用的排序算法
- 顺序栈的简单操作