题解 | #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;
}

#华为机试#
全部评论

相关推荐

头发暂时没有的KFC总裁:找廉价劳动力罢了
点赞 评论 收藏
分享
沟头学院:无关比赛不要写,这样会显着你主次不分,比赛不要撒谎,有哪些就写那些,创新创业建议删除。技能特长可以适当夸大。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务