【C/C++】例题3-6 环状序列/算法竞赛入门经典/数组和字符串

【字典序比较】
对于两个字符串,比较字典序,从第一个开始,如果有两位不一样的出现,那么哪个的ASCII码小,就是字典序较小。如果都一样,那么短的小。
【题目】
输入一个环状串,输出最小的字典序序列。
【代码】

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int maxn = 105;
char input[maxn];

//环状串s的表示法p是否比表示法q的字典序小
int less(const char* s, int p, int q)
//比较p的字典序如果比q的字典序小,就输出1;否则输出0
//注意字典序要比较所有字母
{
   int n = strlen(s);
   for (int i = 0; i < n; i++)
   {
      if (s[(p+i)%n]!=s[(q+i)%n])
      {
         return (s[(p+i)%n]<s[(q+i)%n]);
      }
   }
   return 0;
}

int main()
{
   int T;
   scanf("%d",&T);
   for(int i = 0; i < T; i++) //T组数据
   { 
      scanf("%s",input); 
      int ans = 0;
      int n = strlen(input);
      for (int j = 0; j < n; j++) //每一个顺序打头比较,找出最小的那个打头位置
      {
         if(less(input,j,ans)) ans = j;
      }
      for (int j = 0; j < n; j++){
         printf("%c",input[(ans+j)%n]);
         //putchar(input[j+ans]%n);
      }
      putchar('
');
   }   
   system("pause");
   return 0;
}
原文地址:https://www.cnblogs.com/kinologic/p/13926254.html