刚开始做的时候测试用例一直过不了,看了下题目说是以及要求的最小子序列长度,所以误以为是求所有最长比值的最小长度,想复杂了,其实直接两层循环暴力查找就可以了

#include<stdio.h>
#include<string.h>
int n,s,e,count,sum;
double tmp,max;
char str[105];
int main(){
    while(scanf("%s",&str)!=EOF){
        scanf("%d",&n);

        //初始化需要的所有值
        s=0,e=0,max=0,sum=0; 
        //求长度 
        int len=strlen(str);
        //第一层for循环控制子串的起始位置 
        for(int i=0;i<len;i++){
            //子串中的CG值先初始化为0 
            count=0;
            //控制子串的结束位置 
            for(int j=i;j<len;j++){
                //子串的长度 
                sum=j-i+1;
                //该串中有C或者G,则计数加一 
                if(str[j]=='C'||str[j]=='G'){
                    count++;
                } 
                //子串长度大于五才开始计算 
                if(sum==n){
                    tmp=count*1.0/sum;
                    if(tmp>max){
                        max=tmp;
                        s=i;
                        e=j;
                    }
                }
            }
        }
        for(int i=s;i<=e;i++){
            printf("%c",str[i]);
        }
        printf("\n");
    }
    return 0;
}