这道题的意思是给定一个环状DNA分子,求按字典序排列的最小序列,终点始终在起点的顺时针方向。
代码如下:
-
#include <stdio.h>
-
#include <string.h>
-
-
char sequence[105];
-
-
int main(void)
-
{
-
int t, i;
-
scanf("%d", &t);
-
getchar();
-
-
while(t--)
-
{
-
scanf("%s", sequence);
-
int len = strlen(sequence);
-
-
int ans = 0;
-
for(i = 0; i < len; ++i)
-
{
-
int j = i; //把当前位置作为待比较序列的起点
-
int q = 0; //计步器
-
while(q < len)
-
{
-
if(sequence[(j + q) % len] != sequence[(ans + q) % len])
-
{
-
//如果当前答案序列中的最后一个大于新找到的序列的最后一个,更新起点的位置
-
if(sequence[(j + q) % len] < sequence[(ans + q) % len])
-
ans = i;
-
break;
-
}
-
else ++q;
-
}
-
}
-
int p = len;
-
while(p--)
-
{
-
printf("%c", sequence[ans % len]);
-
++ans;
-
}
-
printf("\n");
-
}
-
return 0;
-
}
阅读(1790) | 评论(0) | 转发(0) |