1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int i,j,k,l,n,h,t,min,head,tail,num[1000]; 6 char a[1000]; 7 scanf("%d",&t); 8 for(j=0;j<t;j++) 9 { 10 scanf("%s",a); 11 n=strlen(a); 12 min=99999; 13 for(i=n-1;i>=0;i--) 14 { 15 if((a[i]!='0')&&(a[i]<min)) 16 { 17 min=a[i]; 18 h=i; 19 } 20 }//从右到左找到第一个非零最小数; 21 if(h==0) 22 { 23 printf("%s\n",a); 24 continue; 25 }//如果没有h之前的部分可以直接输出; 26 head=500; 27 tail=500; 28 //分别记录答案序列的头尾位置; 29 num[500]=a[0]-'0'; 30 for(i=1;i<h;i++) 31 { 32 if(a[i]-'0'<=num[head]) 33 { 34 head--; 35 num[head]=a[i]-'0'; 36 } 37 else 38 { 39 tail++; 40 num[tail]=a[i]-'0'; 41 } 42 }//先处理前h的部分 43 head--; 44 num[head]=a[h]-'0';//把第h个数字放在最前面 45 for(i=h+1;i<n;i++) 46 { 47 tail++; 48 num[tail]=a[i]-'0'; 49 }//把h之后的部分接在后面; 50 for(i=head;i<=tail;i++) 51 { 52 printf("%d",num[i]); 53 } 54 printf("\n"); 55 } 56 }