发一个C++的解题代码吧。供各位参考。

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

bool isGC(char &c){//判断str[i]位置上是不是GC
    if(c=='C'||c=='G') return 1;
    return 0;
}

int main() {
    string str;
    int i,j,flag,n;//i,j为双头指针,flag为GC_Ratio最高的子串的第一个字符下标
    double gcr;//GC_Ratio
    while (cin >> str) { 
        cin>>n; 
        flag=0;gcr=0;
        int len = str.size(),cnt=0;//cnt记录长度为n的子串中GC的个数
        for( i=0;i<n;i++){//先数前n个字符中的GC个数
            if(str[i]=='G' || str[i]=='C')cnt++;
        }
        gcr=(double)cnt/n;//计算前n个字符中的GC_Ratio
        for( i = 1,j= n ; j < len; i++,j++){//依次往后移动,并记录出入的GC字符,直到j到达末尾,
            if(isGC(str[i-1])) cnt--;
            if(isGC(str[j])) cnt++;
            if(gcr < (double)cnt/n){
                flag=i;gcr=(double)cnt/n;
            }
        }
        while(n--){//从flag处开始输出n个字符
            cout<<str[flag++];
        }cout<<endl;
    }
}