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


首先,我会补充完整这道题目描述,然后给出在PHP、Python和JavaScript中解决这个问题的示例代码。题目可能是在询问如何根据给定的化学式计算原子总数。 **题目描述**: 给定一个化学式的字符串(例如:"H2O"表示水,"CO2"表示二氧化碳),请编写一个函数来计算并返回该化学式中包含的原子总数。 **示例**: - 输入:"H2O" - 输出:3(一个氢原子和两个氧原子) - 输入:"CO2" - 输出:3(一个碳原子和两个氧原子) **PHP代码示例**: ```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代码示例**: ```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代码示例**: ```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示例。在处理真实世界的化学式时,你可能需要更复杂的逻辑来正确解析元素和它们各自的数量。正则表达式是处理这类问题的一个有力工具,但也要注意正则表达式可能无法处理所有可能的化学式格式,特别是当化学式包含括号、下标或更复杂的元素表示时。 **码小课网站中有更多相关内容分享给大家学习**,可以在那里找到更多关于算法和数据结构、化学式解析等话题的深入讨论和实战案例。
推荐面试题