题解 | #DNA序列#
DNA序列
https://www.nowcoder.com/practice/e8480ed7501640709354db1cc4ffd42a
#include <iostream> #include <vector> #include <string> #include <iomanip> #include <algorithm> using namespace std; int main() { string s; int n, m; while (cin >> s >> n) { float num = 0.0; float ratio = 0.0; pair<float, string> p; vector< pair<float, string> > vec;//用pair和vector来存储 string str = ""; if (n < s.size()) {//当子串长度小于基因序列 for (int i = 0; i <= s.size() - n; i++) { for (int j = i; j < n + i; j++) { if (s[j] == 'C' || s[j] == 'G') num++;//记录cg出现的次数,计算基因比例用,后面用来比较大小 str += s[j];//把每一次循环的子串都存储起来,以便输出 } ratio = num / n; p = make_pair(ratio, str);//把基因比例和子串一一对应成pair vec.push_back(p);//依次加入vector str = "";//再次把字符串和计数器置零,下次循环 num = 0; ratio = 0.0; } string res = ""; //循环比较vector中的每个元素大小,最后输出 for (int i = 0; i < vec.size() - 1; i++) { if (vec[i].first > vec[i + 1].first) { vec[i].swap(vec[i + 1]); res = vec[i + 1].second; } else if (vec[i].first < vec[i + 1].first) res = vec[i + 1].second; else { res = vec[i].second; vec[i].swap(vec[i + 1]); } } cout << res << endl; } else if (n = s.size()) {//当要输出的子串长度和输入一致时,直接输出 cout << s << endl; } } return 0; }
#华为机试#