MEGChai MEGChai
  • 文章
    • 随笔
    • 笔记
    • 教程
  • 关于
首页 › 数据结构与算法 › 在线评测 › UVaOJ 1586 - Molar mass
AOAPC II

UVaOJ 1586 - Molar mass

Chai
2021-11-24 0:00:00在线评测阅读 196

问题描述

p1586

原题链接:UVaOJ 1586 - Molar mass

相关说明:本题为《算法竞赛入门经典(第2版)》习题 3-2

解法一:模拟

扫描字符串,遍历到元素所代表的字符时,先看看后面是数字还是字符:如果后面直接是其它元素的字符,直接表明当前元素的原子数为 1;如果后面是一串数字,则求得该元素的原子个数,计算其质量并累加到分子质量 res 中。

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
  const map<char, float> TABLE = {
      {'C', 12.01}, {'H', 1.008}, {'O', 16.00}, {'N', 14.01}};
 
  int t;
  cin >> t;
  while (t--) {
    string formula;
    cin >> formula;
 
    float res = 0;
    for (int i = 0; i < formula.length(); ++i) {
      char atomic = formula[i];
      int cnt = 1;
      bool cnt_ommitted = true;
      while (i + 1 < formula.length() && isdigit(formula[i + 1])) {
        int digit = formula[++i] - '0';
        cnt = cnt_ommitted ? digit : 10 * cnt + digit;
        cnt_ommitted = false;
      }
      res += TABLE.at(atomic) * cnt;
    }
    cout << fixed << setprecision(3) << res << endl;
  }
  return 0;
}

Python 代码会 Runtime Error, 没有花时间去找原因:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
TABLE = {'C': 12.01, 'H': 1.008, 'O': 16.00, 'N': 14.01}
 
t = int(input())
for _ in range(t):
    formula = input()
    res = pos = 0
    while pos < len(formula):
        atomic = formula[pos]
        cnt = 1
        cnt_omitted = True
        while (pos + 1 < len(formula) and formula[pos + 1].isdigit()):
            pos += 1
            digit = ord(formula[pos]) - ord('0')
            cnt = digit if cnt_omitted else 10 * cnt + digit
            cnt_omitted = False
        res += TABLE[atomic] * cnt
        pos += 1
    print(f"{res:.3f}")
AOAPC II UVaOJ 字符串
赞赏 赞(0)
订阅
提醒
guest
guest
0 评论
内嵌评论
查看所有评论
近期评论
👌 看我蜗牛练习法。
—— Chai2天前钢琴学习之路
慢既是快!
—— Xinyu Zhou2天前钢琴学习之路
经过了很长时间对社会的失望后,我现在是如此的相信这一点:世界上只有一种真正的英雄主义,那就是在认清生活的真相后依然热爱生活。
—— 虚……4月前飘飘荡荡 500 天
好的演讲总值得人不断咀嚼回味,糟糕的演讲只会不断地让人变得焦虑。
—— Chai2年前妥协会发生在什么时候
这演讲也是让人眼前一亮呢。鸡血up
—— Huang2年前妥协会发生在什么时候
  • 0
  • 0
Copyright © 2020-2022 MEGChai.
  • 文章
    • 随笔
    • 笔记
    • 教程
  • 关于
# 生活 # # 心理 # # 编程 # # 音乐 # # 写作 #
Chai
95
文章
3
评论
32
喜欢
wpDiscuz