Circular Sequence

 

这一题就像求n个元素中的最小值一样,设定好字符的起始位置ans,和判断的起始位置i,两个序列不断比较,如果序列ans比i大,那么ans = i,直到比较结束,输出最后从ans开始的序列

字典序:字符串在字典中的顺序,当两个字符串比较,遇到第一个不相同的字符时,比较两个字符大小,字符大的字典序大,反之字典序小

代码如下:

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

//判断两个典序的大小
int judge(char ch[], int ans, int p)
{
    int i;
    for (i = 0; i < strlen(ch); i++)  //比较两个序列是可以让序列成环状循环,太牛逼了
    {
        if (ch[(ans + i) % strlen(ch)] != ch[(p + i) % strlen(ch)])
            return ch[(ans + i) % strlen(ch)] > ch[(p + i) % strlen(ch)];
    }
    return 0;
}

int main(void)
{
    int T;
    scanf("%d", &T);
    char ch[101];
    while (T--)
    {
        scanf("%s", ch);
        int ans = 0;
        int i;
        for (i = 1; i < strlen(ch); i++)
        {
            if (judge(ch,ans,i))  ans = i;//如果从i开始的序列比从ans的序列小那么ans = i
        }
        for (i = 0; i < strlen(ch); i++)
        {
            putchar(ch[(ans + i) % strlen(ch)]);
        }
        putchar('\n');
    }
    return 0;
}

 

posted @ 2021-01-25 17:08  loliconsk  阅读(76)  评论(0)    收藏  举报