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