题目描述
解题思路
找到非零且最小的数字的位置(有多个则取最靠后的位置) p
然后分3段考虑
0~p : 大的放后,小的放前
p: 把s[p]放在首位
p~len-1:都放在后面
参考代码
#include<iostream>
#include<string>
using namespace std;
int main()
{
int T,i;
string ans,s;
scanf("%d",&T);
while(T--){
cin >> s;
ans = s[0];
char minc = '9';
int p = 0;
for(i = 0;s[i];i++)
if(s[i] != '0' && minc >= s[i])
minc = s[p=i];
for(i = 1;s[i];i++){
if(i == p)
ans = s[i] + ans;
else if(i > p)
ans += s[i];
else if(i < p){
if(s[i] > ans[0])
ans += s[i];
else ans = s[i] + ans;
}
}
cout<< ans <<endl;
}
return 0;
}