当前位置: 面试刷题>> 原子的数量 (经典算法题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示例。在处理真实世界的化学式时,你可能需要更复杂的逻辑来正确解析元素和它们各自的数量。正则表达式是处理这类问题的一个有力工具,但也要注意正则表达式可能无法处理所有可能的化学式格式,特别是当化学式包含括号、下标或更复杂的元素表示时。
**码小课网站中有更多相关内容分享给大家学习**,可以在那里找到更多关于算法和数据结构、化学式解析等话题的深入讨论和实战案例。