题解 | #DNA序列#
DNA序列
http://www.nowcoder.com/practice/e8480ed7501640709354db1cc4ffd42a
暴力破解。
顺次检索每个长度内‘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;//第一段后直接跳出,避免取到后面的也具有最大含量的长度小段
}
}
}