您的位置:首页 > 其它

DNA序列——来自华为OJ平台测试的基础题

2014-09-28 13:20 453 查看

/*

* 一个DNA序列由A/C/G/T四个字母的排列组合组成。G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度)。

* 在基因工程中,这个比例非常重要。因为高的GC-Ratio可能是基因的起始点。

* 给定一个很长的DNA序列,以及要求的最小子序列长度,研究人员经常会需要在其中找出GC-Ratio最高的子序列。

* 知识点: 字符串

* 题目来源: 内部整理

* 练习阶段: 初级

* 运行时间限制: 10Sec

* 内存限制: 128MByte

* 输入:

* 输入一个string型基因序列,和int型子串的长度

* 输出:

* 找出GC比例最高的字串

* 样例输入:

* AACTGTGCACGACCTGA

* 5

* 样例输出:

* GCACG

*/

#include <string>

#include <string.h>

#include <iostream>

using namespace std;

int main()

{

std::string DNASequence;

std::string NumberStr;

int CharNum = 0;

int MaxGCNum = 0;

// 输入DNA序列

getline(std::cin,DNASequence,'\n');

int DNAlength = static_cast<signed>(DNASequence.size());

if(DNAlength==0)

{

system("pause");

return -1;

}

getline(std::cin,NumberStr,'\n');

int Numlength = static_cast<signed>(NumberStr.size());

if((Numlength > sizeof(int))||(Numlength == 0))

{

system("pause");

return -1;

}

const int MinDNAlength = atoi(NumberStr.c_str());

if((MinDNAlength<=0)|| (MinDNAlength>DNAlength))

{

system("pause");

return -1;

}

if(DNAlength<MinDNAlength)

{

system("pause");

return -1;

}

char* MaxGCDNA = new char[MinDNAlength+1];

char* GCDNATemp = new char[MinDNAlength+1];

int BeginNum = CharNum;

int i=0;

int Tempsize=0;

while(CharNum<DNAlength)

{

int MaxGCNumtemp = 0;

Tempsize=0;

for(i=BeginNum;i<BeginNum+MinDNAlength;i++)

{

if(i>=CharNum)

CharNum++;

char a = DNASequence.at(i);

if((a=='G') || (a=='C'))

{

GCDNATemp[Tempsize] = a;

MaxGCNumtemp++;

Tempsize++;

}

// else if((a!='T') && (a!='A'))

// {

// system("pause");

// return -1;

// }

else

{

GCDNATemp[Tempsize] = a;

Tempsize++;

}

}

GCDNATemp[Tempsize] = '\0';

if(BeginNum==0)

{

strcpy_s(MaxGCDNA,MinDNAlength+1,GCDNATemp);

MaxGCNum = MaxGCNumtemp;

}

if(MaxGCNumtemp>MaxGCNum)

{

strcpy_s(MaxGCDNA,MinDNAlength+1,GCDNATemp);

MaxGCNum = MaxGCNumtemp;

}

BeginNum = (CharNum - MinDNAlength) + 1;

}

for(int j=0;j<MinDNAlength;j++)

std::cout<< MaxGCDNA[j];

std::cout << endl;

delete[] MaxGCDNA;

delete[] GCDNATemp;

system("pause");

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: