对于序列的最小值,可以定义一个比较的方法,然后用一般找最小值的方法遍历一遍即可
#include <iostream> #include <string> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> #include <algorithm> #include <stack> #include <cctype> using namespace std; #define mem(a,b) memset(a,b,sizeof(a)) #define pf printf #define sf scanf #define spf sprintf #define debug printf("! ") #define INF 10000 #define MAXN 5010 #define MAX(a,b) a>b?a:b #define blank pf(" ") #define LL long long int n; int cmp(const char* s,int p,int q) { int i =0; for(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 str[15]; sf("%s",str); n = strlen(str); int x = 0,i; for(i=0;i<10;i++) { if(cmp(str,i,x)) x = i; } for(i=0;i<n;i++) putchar(str[(x+i)%n]); blank; }