#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int main(){ //freopen("in.txt","r",stdin); int cas,time,num; char str[1100],ss[1100]; scanf("%d",&cas); while(cas--) { scanf("%s %d",str,&time); if(time==0) { printf("%s\n",str); continue; } strcpy(ss,str); sort(ss,ss+strlen(ss)); int i; for(i=0; ss[i]!='\0'&&ss[i]=='0'; i++); ss[0]=ss[i]; ss[i]='0'; char min='9'; int index=0; for( i=0; str[i]!='\0'; i++) { if(str[i]=='0') continue; if(str[i]<min) { min=str[i]; index=i; } } char temp; if(str[index]!=str[0]) { time--; temp=str[0]; str[0]=str[index]; str[index]=temp; } if(strcmp(str,ss)==0) { printf("%s\n",ss); continue; } int flag=0; num=1; while(time--) { min='9'; index=num; for(int j=num; str[j]!='\0'; j++) { if(str[j]<min) { min=str[j]; index=j; } } if(index==num) { time++; num++; continue; } temp=str[num]; str[num]=min; str[index]=temp; if(strcmp(str,ss)==0) { printf("%s\n",ss); flag=1; break; } } if(flag==0) printf("%s\n",str); } return 0;}
用兩個數組存輸入的一串數字,給ss排序,為避免ss[0]出現0,判斷一下,如果是0就讓它和第一個不是0的數位交換。然後一次次交換,有點類似於冒泡排序的慢動作,把最小的往前挪,每交換一次之後,檢查是否已經是最小的了,如果是直接輸出就可以了。注意第一次交換時還是不可以把0放到str[0]。另外只有真正有交換動作時time才會減1。
“高教社杯”第三屆福建省大學生程式設計競賽