#19310. 蛋白质的质量计算
蛋白质的质量计算
GESP 4级(相当于 CSP-J 普及组 T1/T2 难度)主要考察基础的模拟、字符串处理、数组映射以及简单的数学逻辑。
这次我们选取高中生物必修一《分子与细胞》中关于蛋白质合成的核心考点—— 脱水缩合(Dehydration Condensation) 作为背景。这个过程涉及数量关系计算,非常适合转化为编程题。
题目:蛋白质的质量计算 (Protein Mass Calculator)
【背景知识讲解】
在高中生物必修一中,我们学习了生命活动的主要承担者——蛋白质。 蛋白质是由氨基酸连接而成的长链。
- 脱水缩合:两个氨基酸分子结合在一起形成二肽时,会脱去一分子水()。
- 肽键:连接两个氨基酸的化学键叫做肽键。
- 计算规律:
- 如果有 个氨基酸连成一条链(称为多肽),那么会形成 个肽键,同时脱去 个水分子。
- 蛋白质分子的相对分子质量 = 氨基酸总质量 - 脱去水的总质量。
- 水的相对分子质量为 。
例如:有 3 个氨基酸,质量分别是 100, 120, 110。 它们连成一条链,脱去了 个水分子。 蛋白质总质量 = 。
【题目描述】
生物实验室合成了一条由 个氨基酸组成的肽链。 为了计算这条肽链的相对分子质量,实验员给出了每种氨基酸的代号(一个大写字母)和它对应的相对分子质量。
现在给出一个长度为 的字符串 ,表示这条肽链的氨基酸序列。请你利用给定的氨基酸质量表,计算出这条肽链最终的相对分子质量。
计算公式提示:
$$\text{总质量} = (\sum \text{所有氨基酸的质量}) - (\text{氨基酸数量} - 1) \times 18 $$(注意:如果只有 1 个氨基酸,不会脱水,减去 0)
【输入格式】
第一行包含两个整数 和 ,分别表示氨基酸的种类数量和肽链的长度。 接下来 行,每行包含一个大写字母 和一个整数 ,表示氨基酸代号及其质量。 最后一行包含一个长度为 的字符串 ,表示肽链序列。
【输出格式】
输出一个整数,表示该肽链的相对分子质量。
【样例数据】
输入:
3 5
A 89
G 75
L 131
AGLLA
输出:
443
样例解释:
- 氨基酸种类表:A=89, G=75, L=131。
- 肽链序列:
A G L L A(5个氨基酸)。 - 氨基酸总质量:。
- 脱水数量: 个水分子。
- 脱水总质量:。
- 最终质量:。
【数据范围】
- 对于 100% 的数据:,。
- 氨基酸质量 为整数,。
- 字符串 只包含输入中给出的大写字母。
- 保证最终结果在
int范围内。
一、 思路提示
- 数据的存储(映射):
- 题目给出了“字符 整数”的对应关系。比如 'A' 对应 89。
- 怎么快速查表呢?因为字符是大写字母,我们可以用一个数组来充当“字典”。
- 定义
int weight[128]。如果输入A 89,我们就存weight['A'] = 89。 - 这样后续读到字符
c时,直接用weight[c]就能拿到质量,速度最快。
- 累加求和:
- 遍历字符串 ,把每个字符对应的质量加到
total_weight变量中。
- 遍历字符串 ,把每个字符对应的质量加到
- 减去水的质量:
- 如果 ,需要减去 。
- 如果 ,不需要减(或者套用公式 ,也没问题)。
- 如果 ,题目虽然说 ,但在编程中注意这种边界总是不亏的。
二、 预备知识点总结
- 数组映射(Hash Map 思想):利用 ASCII 码将字符作为数组下标,实现 查找。
- 字符串遍历:使用
for循环访问字符串的每一位。 - 基础数学:累加器和简单的算术运算。
三、 启发式教学:草稿纸上的推理过程
教练:“同学们,想象我们是一台电子秤。现在来了一串珠子(氨基酸),我们要称重。”
-
建立价格表:
- “先看说明书(输入前几行)。'A' 是 89克,'G' 是 75克... 把它写在黑板的角落,别忘了。”
- 草稿操作:画个表格,A$\to\to$75。
-
称重过程:
- “传送带送来了序列
AGLLA。” - “第1个是 A,加 89。总重 89。”
- “第2个是 G,加 75。总重 164。”
- “第3个是 L,加 131... ”
- “算出一共重 515。”
- “传送带送来了序列
-
扣除包装皮(脱水):
- “这5个珠子是连在一起的。每连接处都要挤出一滴水(重18)。”
- “5个珠子有几个连接处?”(画图:O-O-O-O-O)
- “4个缝隙。所以减去 。”
-
最终结果:
- “。搞定!”
四、 读题关键词总结
- “代号和质量” 需要建立映射关系(数组或 map)。
- “ 个水分子” 这是生物题转数学题的核心公式,千万别漏减,也别多减。
- “相对分子质量” 结果是整数,用
int即可。