做法:可以用贪心,每次交换都把最小的换到前面,记得第一位不可以为0
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int LMT=1003; char sec[LMT]; int main() { int T,m,len,p,mi,t; scanf("%d",&T); while(T--) { scanf("%s%d",sec,&m); len=strlen(sec); for(int i=0;i<len&&m;i++) { p=-1;mi=sec[i]; for(int j=i;j<len;j++) if(mi>sec[j]&&(sec[j]!='0'||i)) { mi=sec[j]; p=j; } if(p!=-1) { t=sec[p]; sec[p]=sec[i]; sec[i]=t; m--; } } printf("%s\n",sec); } return 0; }