#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。
“高教社杯”第三届福建省大学生程序设计竞赛