暴力破解。

顺次检索每个长度内‘C’、‘G’元素的含量。

范围是开头到(总长度-规定长度),注意这是段距离,等号可以取到。

每取到一个元素,计数量+1,视情况更新最高含量值。

将每个长度内的含量记录。

与最大含量比较,如果相同,则从此处开始输出。

输出后直接跳出循环,可以笔面再输出后方相同含量元素的长度小段。

看注释。

#include<string.h>
#include<stdio.h>
#include<stdlib.h>


char *string;
int i=0,j=0;
int window;
int len;
int N;
int flag;
int max=0;
char *asb;


int main()
{
    string=(char*)malloc(sizeof(char));
    
    scanf("%s\n",string);
    len =strlen(string);
    scanf("%d\n",&N);
    
    asb=(char*)malloc(sizeof(char));
    for(i=0;i<=(len-N);i++)  //总长度内指针取值范围
    {
        flag=0;
        for(j=i;j<i+N;j++)//从每个位置开始取给定的长度
        {
            if((*(string+j)=='G')||(*(string+j)=='C'))//检索给定长度内是否含有所需元素“C”“G”.
            {
               flag++; //记录含量
            }
        }
        asb[i]=flag;//记录每个给定长度内的含量
        if(flag>max)//更新最大含量
        {
            max=flag;
            
        }
    }
    
    for(i=0;i<=(len-N);i++) //检索第一个与含最多元素的给定长度
    {
        if(asb[i]==max)
        {
            for(j=i;j<i+N;j++)
            {
               printf("%c",string[j]);//输出
            }
            break;//第一段后直接跳出,避免取到后面的也具有最大含量的长度小段
        }
        
    }
    
    
}