当前位置: 面试刷题>> 原子的数量 (经典算法题500道)


首先,我会补充完整这道题目描述,然后给出在PHP、Python和JavaScript中解决这个问题的示例代码。题目可能是在询问如何根据给定的化学式计算原子总数。

题目描述: 给定一个化学式的字符串(例如:"H2O"表示水,"CO2"表示二氧化碳),请编写一个函数来计算并返回该化学式中包含的原子总数。

示例

  • 输入:"H2O"

  • 输出:3(一个氢原子和两个氧原子)

  • 输入:"CO2"

  • 输出:3(一个碳原子和两个氧原子)

PHP代码示例

function countAtoms($formula) {
    $count = 0;
    $prevNum = 0;
    $i = 0;
    $length = strlen($formula);

    while ($i < $length) {
        // 如果当前字符是数字,则计算数字的大小
        if (is_numeric($formula[$i])) {
            $prevNum = intval($formula[$i]);
            $i++;
            // 处理多位数字
            while ($i < $length && is_numeric($formula[$i])) {
                $prevNum = $prevNum * 10 + intval($formula[$i]);
                $i++;
            }
            $count += $prevNum;
        } else {
            // 如果不是数字,默认为1
            $count += 1;
        }
        // 跳过非数字字符
        $i++;
    }

    // 注意到这个简单的解法没有处理化学式中的元素重复(例如"H2O2"),
    // 真实场景中需要更复杂的逻辑来区分不同的元素并分别计数。
    // 这里仅为了展示基本思路,我们假设每个字符代表一个不同的原子。

    return $count;

    // 注意:上述代码简化处理了问题,未完全按化学式规则解析。
    // 对于真实化学式,应使用正则表达式或解析器来正确区分元素和数量。
}

echo countAtoms("H2O"); // 输出应为3,但上述代码逻辑简单,输出可能不准确

Python代码示例

import re

def countAtoms(formula):
    # 使用正则表达式匹配元素和数量
    matches = re.findall(r'([A-Z][a-z]?)(\d*)', formula)
    total_count = 0
    for element, count in matches:
        # 如果没有指定数量,默认为1
        num = int(count) if count else 1
        total_count += num
    return total_count

print(countAtoms("H2O"))  # 输出: 3
print(countAtoms("CO2"))  # 输出: 3

JavaScript代码示例

function countAtoms(formula) {
    let totalCount = 0;
    const matches = formula.match(/[A-Z][a-z]?(\d*)/g) || [];

    matches.forEach(match => {
        const [, count = '1'] = match.split(/(?=\d)/); // 分割数字和字母,默认数量为1
        totalCount += parseInt(count, 10);
    });

    return totalCount;
}

console.log(countAtoms("H2O")); // 输出: 3
console.log(countAtoms("CO2")); // 输出: 3

请注意,这些示例代码都进行了一定程度的简化,特别是PHP示例。在处理真实世界的化学式时,你可能需要更复杂的逻辑来正确解析元素和它们各自的数量。正则表达式是处理这类问题的一个有力工具,但也要注意正则表达式可能无法处理所有可能的化学式格式,特别是当化学式包含括号、下标或更复杂的元素表示时。

码小课网站中有更多相关内容分享给大家学习,可以在那里找到更多关于算法和数据结构、化学式解析等话题的深入讨论和实战案例。

推荐面试题