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