Chinaunix首页 | 论坛 | 博客
  • 博客访问: 80981
  • 博文数量: 32
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 284
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-26 14:00
个人简介

有梦想的人,正在努力

文章分类

全部博文(32)

文章存档

2015年(32)

我的朋友

分类: C/C++

2015-05-29 12:30:09

这道题的意思是给定一个环状DNA分子,求按字典序排列的最小序列,终点始终在起点的顺时针方向。

代码如下:

  1. #include <stdio.h>
  2. #include <string.h>

  3. char sequence[105];

  4. int main(void)
  5. {
  6.     int t, i;
  7.     scanf("%d", &t);
  8.     getchar();

  9.     while(t--)
  10.     {
  11.         scanf("%s", sequence);
  12.         int len = strlen(sequence);

  13.         int ans = 0;
  14.         for(i = 0; i < len; ++i)
  15.         {
  16.             int j = i; //把当前位置作为待比较序列的起点
  17.             int q = 0; //计步器
  18.             while(q < len)
  19.             {
  20.                 if(sequence[(j + q) % len] != sequence[(ans + q) % len])
  21.                 {
  22.                     //如果当前答案序列中的最后一个大于新找到的序列的最后一个,更新起点的位置
  23.                     if(sequence[(j + q) % len] < sequence[(ans + q) % len])
  24.                         ans = i;
  25.                     break;
  26.                 }
  27.                 else ++q;
  28.             }    
  29.         }
  30.         int p = len;
  31.         while(p--)
  32.         {
  33.             printf("%c", sequence[ans % len]);
  34.             ++ans;
  35.         }
  36.         printf("\n");
  37.     }
  38.     return 0;
  39. }

阅读(1790) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~