分子量-算法竞赛习题3-2:给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01。
给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol)。C++实现
例如:
输入:C6H5OH
输出:94.108g/mol
话不多说,先看代码:
#include <iostream>
#include<ctype.h>
using namespace std;
const double d1 = 12.01;
const double d2 = 1.008;
const double d3 = 16.00;
const double d4 = 14.01;int main()
{char a[20];double s = 0;int m = 0, n = 0, p = 0, q = 0;cout << "输入分子字符串(含C、H、O、N):" << endl;cin.getline(a, 20); //字符串输入方法for (int i = 0; i < strlen(a); i++){if (a[i] == 'C' && (isdigit(a[i + 1]))){m += int(a[i + 1]-'0');//cout << int(a[i + 1]-'0');}else if (a[i] == 'C' && !(isdigit(a[i + 1])))m += 1;if (a[i] == 'H' && (isdigit(a[i + 1]))){n += int(a[i + 1]-'0');}else if (a[i] == 'H' && !(isdigit(a[i + 1])))n += 1;if (a[i] == 'O' && (isdigit(a[i + 1]))){p += int(a[i + 1]-'0');}else if (a[i] == 'O' && !(isdigit(a[i + 1])))p += 1;if (a[i] == 'N' && (isdigit(a[i + 1]))){q += int(a[i + 1]-'0');}else if (a[i] == 'N' && !(isdigit(a[i + 1])))q += 1;}s = d1 * m + d2 * n + d3 * p + d4 * q;cout << "该分式分子量为:" << s << "g/mol"<<endl;return 0;
}
思路解析:
1.这里使用的是笨方法,但是比较容易理解,先进行一次循环,一次判断每一个字符的个数。
2.这里有坑的是,如何确定什么时候是一次出现就为1?但是可能后面还会出现一次的情况,所以依然要累加+1。
3.最难的是,忘了字符串不能和int型直接相加,需要进行转换为整型才可以,所以在这里一直有bug,这里的方法是实现字符串到数字的转换int()方法与char[i+1]-‘0’的数字转换才能成功。
程序运行结果图:
新手驾到,请多指教!
分子量-算法竞赛习题3-2:给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01。相关推荐
- 算法竞赛入门经典 习题3-2 分子量 Molar Mass
给出一种物质的分子式(不带括号),求其分子量.本题分子式中只包含四种原子,分别为C.H.O.N,原子量分别为12.01,1.008,16.00,14.01.例如,C6H5OH的分子量为94.108g/ ...
- 算法竞赛入门竞赛 习题3-2 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)
给出一种物质的分子式(不带括号),求分子量.本题中的分子式只包含4种原子,分 别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol).例如,C6 ...
- 刘汝佳《算法竞赛入门经典(第二版)》习题(三)
刘汝佳<算法竞赛入门经典(第二版)>第三章习题(一) 习题3-1 得分(ACM/ICPC Seoul 2005,UVa1585) 给出一个由O和X组成的串(长度为1~80),统计得分.每个 ...
- 刘汝佳算法竞赛第二版习题3-2思路
最近在看刘汝佳编写的紫皮算法书,第三章后面有个习题,尝试写了一下,总感觉能找到更加便利的解题方法,但能力有限没想到. 上网搜索了一下,也没找到能让我眼前一亮的方法,那就暂且把我写的shi山放出来让大伙 ...
- 算法竞赛入门经典第3章
3.1数组 数组较大 比较大的数组尽量声明在main函数外,否则程序可能无法进行. 数组操作 如果要从数组a复制k个元素到数组b,可以这样做:memcpy(b,a,sizeof(int)*k). 如 ...
- 【Java】基于分子式求分子量
题目要求 给出一种至多只含 C.H.O.N 四种元素的有机物的分子式(不带括号),求分子量,要求保留三位小数. 已知:C.H.O.N 的原子量分别为12.01, 1.008, 16.00, 14.01 ...
- 算法竞赛入门经典(第二版)第三章习题
声明:作者水平有限,只是会基础C语言的小菜,C++还未入门.作者仅根据算法竞赛入门经典(第二版)书上第三章习题所述题意而编写,并未严格按照原题的输入输出编写,代码仅经过个人测试(OJ网站太慢了).代码 ...
- 算法竞赛入门【码蹄集进阶塔335题】(MT2026-2050)
算法竞赛入门[码蹄集进阶塔335题](MT2026-2050) 文章目录 算法竞赛入门[码蹄集进阶塔335题](MT2026-2050) 前言 为什么突然想学算法了? 为什么选择码蹄集作为刷题软件? ...
- 算法竞赛五冠五亚得主,手把手带你了解算法竞赛
大家好,我是王贺(鱼遇雨欲语与余),一个工作两年的推荐广告算法工程师,热爱算法竞赛.今天跟大家聊聊我的新书<机器学习算法竞赛实战>,以及我的竞赛经历.明天晚上的直播我会以天池平台开放的二手 ...
- 蓝桥杯算法竞赛系列第二章——深入理解重难点之递归(上)
铁汁们,递归(下)已经更新咯,欢迎铁汁们批评指正. 蓝桥杯算法竞赛系列第二章--深入理解重难点之递归(下)_安然无虞的博客-CSDN博客 目录 一.递归是什么? 二.如何理解"递归" ...
最新文章
- Java常见数据结构以及特点、使用场景
- 开源史上最成功的8个开源产品
- 【Linux网络编程】浅谈 C/S 和 B/S 架构
- 【十大经典数据挖掘算法】EM
- 报错:Navicat for MySQL 连接MySQL 8.0 出现1130错误
- “农业大数据”专题征文通知
- Shell——运行Shell脚本
- LeetCode 5380. 数组中的字符串匹配
- Python之代码性能分析工具(时间+内存)
- mysql之分页查询
- 【递归,Java从入门到精通第五版pdf百度云
- 猿创征文 | 国产数据库之神通数据库详解安装和使用
- Win10 安装 JDK1.8 及配置环境变量
- web程序设计(9)——编写阅读器(JQuery基础)
- Java 中文转拼音/汉字转拼音, 中文转五笔/汉字转五笔, 下载字典!
- java解压出来损坏_在Java中解压缩错误
- oracle数据库期末上机题,oracle数据库期末考试试题及复习资料
- 微信小程序仿照微信拖动缩放图片和截取头像
- java实训答辩ppt_实训项目答辩.ppt
- 数据库三范式 无重复列 完全依赖主键 属性不依赖非主属性