#include<cstdio>
#include<cstring>
const int maxn = 105;
bool less(const char* s, int p, int q)
{
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()
{
char s[maxn];
scanf_s("%s", s,maxn);
int ans = 0;
int n = strlen(s);
for (int i = 1; i < n; i++)
if (less(s, i, ans))
ans = i;
for (int i = 0; i < n; i++)
putchar(s[(i + ans) % n]);
putchar('\n');
}
其中const char* s作用是禁止less函数修改原字符串s
main函数中
for (int i = 1; i < n; i++)
if (less(s, i, ans))
ans = i;
ans为字典序表示方法(从第ans位开始读取)
作用是遍历strlen-1种字典序(原来的字典序为ans0)
筛选出最小字典序记录到ans中;