HJ63 DNA序列
第一版
#include <stdio.h>
int GetStrRatio(char* str, int slow, int fast)
{
int validCount = 0;
for(int i = slow; i < fast; i++)
{
if(str[i] == 'C' || str[i] == 'G')
{
validCount++;
}
}
return validCount;
}
int main() {
int num = 0;;
char strArray[1001] = {'\0'};
while (scanf("%s", strArray) != EOF) { // 注意 while 处理多个 case
// 64 位输出请用 printf("%lld") to
// printf("%s\n", strArray);
int len = strlen(strArray);
scanf("%d", &num);
int validCountMax = 0;
int validCountMaxIndex = 0;
int slow = 0;
int fast = 0;
int validCount = 0;
for(int i = 0; i < len - num; i++)
{
slow = i;
fast = slow + num;
validCount = GetStrRatio(strArray, slow, fast);
if(validCount > validCountMax)
{
validCountMax = validCount;
validCountMaxIndex = slow;
}
}
strArray[fast] = '\0';
printf("%s", strArray + slow);
}
return 0;
}
第一版程序存在问题,就是最后两行没有考虑全,导致打印的字符串异常,下面的代码是经过调试修改的Aced版
Aced
#include <stdio.h>
int GetStrRatio(char* str, int slow, int fast)
{
int validCount = 0;
for(int i = slow; i < fast; i++)
{
if(str[i] == 'C' || str[i] == 'G')
{
validCount++;
}
}
return validCount;
}
int main() {
int num = 0;;
char strArray[1001] = {'\0'};
while (scanf("%s", strArray) != EOF) { // 注意 while 处理多个 case
// 64 位输出请用 printf("%lld") to
// printf("%s\n", strArray);
int len = strlen(strArray);
scanf("%d", &num);
int validCountMax = 0;
int validCountMaxIndex = 0;
int slow = 0;
int fast = 0;
int validCount = 0;
for(int i = 0; i < len - num; i++)
{
slow = i;
fast = slow + num;
validCount = GetStrRatio(strArray, slow, fast);
if(validCount > validCountMax)
{
validCountMax = validCount;
validCountMaxIndex = slow;
}
}
strArray[validCountMaxIndex + num] = '\0';
printf("%s", strArray + validCountMaxIndex);
}
return 0;
}