【GESP】C++三级练习 luogu-B2114 配对碱基链
GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★✮☆☆☆。
luogu-B2114 配对碱基链
题目要求
题目描述
脱氧核糖核酸(DNA)由两条互补的碱基链以双螺旋的方式结合而成。
而构成 DNA 的碱基共有 $4$ 种:
分别为腺嘌呤($A$)
鸟嘌呤($G$)
胸腺嘧啶($T$)
胞嘧啶($C$)
我们知道,在两条互补碱基链的对应位置上,腺嘌呤总是和胸腺嘧啶配对,鸟嘌呤总是和胞嘧啶配对。
你的任务就是根据一条单链上的碱基序列,给出对应的互补链上的碱基序列。
输入格式
一个字符串,表示一条碱基链。
这个字符串只含有大写字母 $A$ 、 $T$ 、 $G$ 、 $C$,分别表示腺嘌呤、胸腺嘧啶、鸟嘌呤和胞嘧啶。
字符串长度不超过 $255$。
输出格式
一个只含有大写字母 $A$ 、 $T$ 、 $G$ 、 $C$ 的字符串,为与输入的碱基链互补的碱基链。
输入输出样例 #1
输入 #1
1
ATATGGATGGTGTTTGGCTCTG
输出 #1
1
TATACCTACCACAAACCGAGAC
题目分析
解题思路
题目要求根据输入的DNA单链碱基序列,输出其互补链的碱基序列。
- 解题关键点:
- 理解DNA碱基互补配对规则:A配对T,G配对C
- 字符串的遍历和替换操作
- 确保正确处理每个碱基的配对关系
- 输出结果为一行字符串
- 具体思路:
- 读取输入的DNA序列字符串
- 创建等长的结果字符串
- 遍历DNA序列,根据配对规则转换每个碱基:
- 遇到A转换为T
- 遇到T转换为A
- 遇到G转换为C
- 遇到C转换为G
- 输出互补碱基链
- 时间复杂度分析:
- 需要遍历一次字符串,时间复杂度为O(n),其中n为字符串长度
- 空间复杂度为O(n),需要存储互补链字符串
示例代码
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
31
32
33
34
#include<iostream>
#include<string>
int main(){
// 声明输入字符串变量
std::string str;
// 从标准输入读取DNA序列
std::cin>>str;
// 创建结果字符串,初始化为相同长度的空字符串
std::string r_str = std::string(str.size(), '\0');
// 遍历输入字符串的每个字符
for(int i = 0; i < str.size(); i++){
// 根据碱基配对规则进行转换
// T配对A
if (str[i] == 'T') {
r_str[i] = 'A';
}
// A配对T
else if(str[i] == 'A') {
r_str[i] = 'T';
}
// G配对C
else if(str[i] == 'G') {
r_str[i] = 'C';
}
// C配对G
else if(str[i] == 'C') {
r_str[i] = 'G';
}
}
// 输出互补碱基链
std::cout<<r_str;
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权