题解 | DNA序列

#include <algorithm>
#include <cmath>
#include <iostream>
#include <iterator>
#include <map>
#include <string>
#include <vector>
using namespace std;

int main() {
    string seq;
    int sub_str_len;

    cin >> seq >> sub_str_len;

    int seq_len = seq.size();
    vector<double> ratios;
    vector<string> sub_strs;
    for (int i = 0; i <= (seq_len - sub_str_len); i ++) {
        // 1. 依次取出子串
        string temp = seq.substr(i, sub_str_len);
        // 2. 在子串中算出 GC 比例
        int counter = 0;
        for (char ch : temp) {
            if (ch == 'C' || ch == 'G') {
                counter ++;
            }
        }
        double ratio = double(counter) / double(sub_str_len);
        // 3. 将比例、子串对 存入vector中
        ratios.push_back(ratio);
        sub_strs.push_back(temp);
    }

    // 4. 找的比例的最大值
    auto max_pos = max_element(ratios.begin(), ratios.end());
    double max_ratio = *max_pos; 

    // 5.遍历ratios 找到最大值第一次出现的下标
    double eps = pow(10, -4);
    int index = 0;
    for (int i = 0; i < ratios.size(); i ++) {
        if (abs(ratios[i] - max_ratio) <= eps) {
            index = i;
            break;
        }
    }

    // 6. 输出sub_strs在index的内容
    cout << sub_strs[index] << endl;

    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论
GC比例计算很关键
1 回复 分享
发布于 01-02 13:20 陕西

相关推荐

点赞 评论 收藏
分享
06-11 17:39
门头沟学院 Java
小呆呆的大鼻涕:卧槽,用户彻底怒了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务