8626 原子量计数

分析:
1. **读取输入**:首先,我们需要读取输入中的第一行,了解有多少个化学式需要处理。之后,对于每个化学式,我们逐行读取并进行处理。
2. **解析化学式**:对于每个化学式,我们需要遍历其字符串,识别出元素(C, H, O, N)及其后可能跟随的数字(表示该元素的数量)。如果元素后没有数字,则默认数量为1。
3. **计算分子量**:通过查找每个元素对应的原子量(C: 12.01 g/mol, H: 1.008 g/mol, O: 16.00 g/mol, N: 14.01 g/mol),并乘以该元素的数量,我们可以计算出每个元素的总质量。将所有元素的总质量相加,得到整个化学式的分子量。
4. **输出结果**:对于每个化学式,计算完成后输出其分子量,保留三位小数。

代码实现:


#include <iostream>
#include <string>
#include <map>
#include <iomanip>

using namespace std;

// Function to calculate the mass of a chemical formula
double calculateMass(const string& formula, const map<char, double>& atomicMasses) {
    double totalMass = 0.0;
    int i = 0;
    while (i < formula.length()) {
        char element = formula[i];
        int quantity = 0; // Initialize quantity to 0
        i++;
        // Loop to calculate the quantity of the current element
        while (i < formula.length() && isdigit(formula[i])) {
            quantity = quantity * 10 + (formula[i] - '0');
            i++;
        }
        // If quantity is still 0, it means there was no number after the element, so set it to 1
        if (quantity == 0) {
            quantity = 1;
        }
        // Add the mass of the current element to the total mass
        totalMass += atomicMasses.at(element) * quantity;
    }
    return totalMass;
}

int main() {
    int T;
    cin >> T;
    // Map to store the atomic masses of the elements
    map<char, double> atomicMasses = {
            {'C', 12.01},
            {'H', 1.008},
            {'O', 16.00},
            {'N', 14.01}
    };

    while (T--) {
        string formula;
        cin >> formula;
        cout << setprecision(3) << fixed << calculateMass(formula, atomicMasses) << endl;
    }

    return 0;
}

这段代码通过定义一个`calculateMass`函数来处理核心逻辑,该函数接受一个化学式字符串和一个元素原子量的映射表作为参数。通过遍历化学式字符串,识别元素及其数量,并利用映射表查找对应的原子量进行计算,最终得到化学式的总分子量。`main`函数中,首先读取案例数量,然后对每个化学式调用`calculateMass`函数进行处理,并输出结果。通过使用`setprecision`和`fixed`,确保输出的分子量保留三位小数,满足题目要求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/793633.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在Ubuntu环境下使用加速器配置Docker环境

一、安装并打开加速器 这个要根据每个加速器的情况来安装并打开&#xff0c;一般是会开放一个代理端口&#xff0c;比如1087 二、安装Docker https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script 三、配置Docker使用加速器 3.1 修改配置…

如何处理 PostgreSQL 中由于表锁定导致的并发访问问题?

文章目录 一、表锁定的类型二、表锁定导致的并发访问问题三、解决方案&#xff08;一&#xff09;使用合适的锁定模式&#xff08;二&#xff09;优化事务处理&#xff08;三&#xff09;避免不必要的锁定&#xff08;四&#xff09;使用索引&#xff08;五&#xff09;监控和分…

Protobuf: 大数据开发中的高效数据传输利器

作为一名大数据开发者&#xff0c;我经常需要处理海量的数据传输和存储。在这个过程中&#xff0c;选择一个高效、可靠的数据序列化工具至关重要。今天&#xff0c;我想和大家分享一下我在项目中使用 Protobuf 的经历。 目录 故事背景Protobuf 简介优点&#xff1a; 实战案例示…

在【Open3D】点云世界中精准定位,绘制立方体标记特定点位

Open3D精准定位点云特定点&#xff0c;绘制醒目立方体标记&#xff0c;提升数据解读效率与直观性。 Open3D是一个开源的跨平台计算机视觉库&#xff0c;它为开发人员提供了一个易于使用且高性能的3D数据处理平台。 # pcd&#xff1a;传入原始点云图 # point1&#xff1a;要进…

【HarmonyOS】获取通讯录信息

【HarmonyOS】获取通讯录信息 一、问题背景&#xff1a; 在Android和IOS中&#xff0c;获取手机通讯录信息的方式&#xff0c;一般是申请通讯录权限后&#xff0c;获得手机所有的通讯录列表信息。 在鸿蒙中&#xff0c;因为权限方式安全性提高的变更&#xff1a;将用户权限限…

springboot 旅游导航系统-计算机毕业设计源码69476

目 录 第 1 章 引 言 1.1 选题背景 1.2 研究现状 1.3 论文结构安排 第 2 章 系统的需求分析 2.1 系统可行性分析 2.1.1 技术方面可行性分析 2.1.2 经济方面可行性分析 2.1.3 法律方面可行性分析 2.1.4 操作方面可行性分析 2.2 系统功能需求分析 2.3 系统性需求分析…

【Python实战因果推断】30_双重差分1

目录 Panel Data 在讨论了干预效果异质性之后&#xff0c;是时候转换一下思路&#xff0c;回到平均干预效果上来了。在接下来的几章中&#xff0c;您将学习如何利用面板数据进行因果推断。 面板数据是一种跨时间重复观测的数据结构。在多个时间段观察同一单位&#xff0c;可以…

347. 前 K 个高频元素(中等)

347. 前 K 个高频元素 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;347. 前 K 个高频元素 2.详细题解 寻找出现频率前 k k k高的元素&#xff0c;因此需要先统计各个元素出现的次数&#xff0c;该步骤时间复杂度为 O ( n ) O(n) O(n)…

前端-Cookie篇

文章目录 一、由来什么是Cookie&#xff1f;特点Cookie的类型 二、原理三、Cookie生成机制客户端设置案例 四、属性五、缺陷最后分享一段自己工作中封装的一些关于cookie的公众方法✒️总结 前端Cookie是Web开发中非常重要的一部分&#xff0c;它是服务器发送到用户浏览器并保存…

如何识别图片文字转化为文本?5个软件帮助你快速提取图片文字

如何识别图片文字转化为文本&#xff1f;5个软件帮助你快速提取图片文字 将图片中的文字提取为文本是一项非常有用的技能&#xff0c;特别是当你需要处理大量扫描文档、截图或其他图片时。以下是五款能够帮助你快速提取图片文字的软件&#xff1a; 迅捷文字识别 这是一款非…

对接高德开放平台API

高德开放平台API&#xff1a; https://lbs.amap.com/ 一、天气查询 天气查询: https://lbs.amap.com/api/webservice/guide/api/weatherinfo adcode城市码表下载: https://lbs.amap.com/api/webservice/download Component public class WeatherUtil {Resourceprivate GdCon…

如何使用Python在企业微信中发送测试结果?操作看这里!

在日常的自动化测试工作中&#xff0c;一般会需要把测试结果同步到工作群里&#xff0c;方便信息同步。那么我们今天就使用企业微信和Pythonrequests库来演示一下具体如何操作吧&#xff01; 01 准备 开始之前&#xff0c;我们应该确保已经安装了python环境&#xff0c;并且要…

【Java16】多态

向上类型转换 对于引用变量&#xff0c;在程序中有两种形态&#xff1a;一种是编译时类型&#xff0c;这种引用变量的类型在声明它的时候就决定了&#xff1b;另一种则是运行时类型&#xff0c;这种变量的类型由实际赋给它的对象决定。 当一个引用变量的编译时类型和运行时类…

LabVIEW电容器充放电监测系统

概述 为了对车用超级电容器的特性进行研究&#xff0c;确保其在工作时稳定可靠并有效发挥性能优势&#xff0c;设计了一套车用超级电容器充放电监测系统。该系统通过利用传感器、USB数据采集卡、可调直流稳压电源、电子负载以及信号调理电路&#xff0c;完成对各信号的采集和超…

jdevelope安装

准备 1.jdk1.8&#xff08;已经安装不做记录&#xff09; 2.下载jdevelope安装包 3.安装包安装jdevelope开发工具 4.创建或导入项目 下载jdevelope安装包 官网下载地址&#xff1a;https://edelivery.oracle.com 安装包安装jdevelope开发工具 cmd管理员权限运行安装脚本…

Codeforces Round 954 (Div. 3)(A~D题)

A. X Axis 思路: 1~10暴力枚举一下所有可能 代码: #include<bits/stdc.h> using namespace std; #define N 1000005 typedef long long ll; typedef unsigned long long ull; ll n, m, t, h, k; ll a, b, c; ll ans, num, sum, cnt; ll temp[N], f1[N], f2[N]; bool f…

Nature Communications|柔性无感智能隐形眼镜(柔性传感/可穿戴电子/柔性电子)

南京大学徐飞(Fei Xu)、陆延青(Yanqing Lu)、陈烨(Ye Chen)和江苏省人民医院袁松涛(Songtao Yuan)团队,在《Nature Communications》上发布了一篇题为“Frequency-encoded eye tracking smart contact lens for human–machine interaction”的论文。论文内容如下: 一、 摘…

科普文:一天学会shell编程

1.shell概叙 本文将从shell执行、语法、实战三个方面来讲解shell编程&#xff0c;其实shell编程就是个批处理&#xff0c;将你平时在服务器上单独执行的命令&#xff0c;按照一定要求组织起来&#xff0c;写在一起&#xff0c;然后统一执行&#xff0c;就完事了。 对于运维人员…

基于Android平台开发,仿头条新闻app

相关视频教程在某站上面(&#x1f50d;浩宇软件开发) 1. 项目模块功能思维导图 2. 项目涉及到的技术点 数据来源&#xff1a;聚合数据API使用okhttp网络请求框架获取api数据使用gson库解析json数据使用RecyclerViewadapter实现新闻列表使用SQLite数据库实现用户登录&#xff0…

【thingsbord源码编译】 显示node内存不足

编译thingsbord显示报错 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory问题原因分析 重新安装java版本 编译通过