题目大意:给定一个数字,相邻位上数字可交换,求最多交换k次能得到的最大数字。
解题思路:从高位往低位枚举最高位,往后找k位以内最大的数字记为ma,如果最高位上数字小于ma,ma为最高位,k减去相应次数。
代码如下:
#include <cstdio>
#include <cstring>
char s[20];
int a[20];
int main()
{
int n,k,p=1,j;
scanf("%s",s);
scanf("%d",&k);
n=strlen(s);
for(int i=0;i<n;i++)
a[i]=s[i]-'0';
if(k)
for(int i=0;i<n;i++)
{
int m=k,ma=0,de=i+1;
for(j=i+1;j<n;j++)
{
m--;
if(ma<a[j])
{
ma=a[j];
de=j;
}
if(m<=0)
break;
}
int t=a[de];
if(a[i]<t)
{
for(int l=de;l>=i+1;l--)
a[l]=a[l-1];
a[i]=t;
k-=(de-i);
}
if(k==0)
break;
}
for(int i=0;i<n;i++)
printf("%d",a[i]);
printf("\n");
return 0;
}