codeforces 435B
题意:只能对相邻的两个数字进行交换,允许k次交换,输出交换能得到的最大的数。从最高位开始寻找最优,每次寻找能交换的步数里交换到的最大值进行交换。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char num[30];
int main() {
int k;
scanf("%s%d",num,&k);
int len=strlen(num);
for(int i=0;i<len;i++) {
if(num[i]<'9') {
char temp=num[i];
int flag=i;
for(int j=i+1;j<len && j<=i+k;j++) { //找出num[i+1]~num[i+k]中最大的
if(num[j]>temp) {
temp=num[j];
flag=j;
}
}
if(flag!=i) {
for(int j=flag-1;j>=i;j--) swap(num[j+1],num[j]);
k-=flag-i;
}
}
}
for(int i=0;i<len;i++) printf("%c",num[i]);
printf("\n");
return 0;
}