目录
题目描述
给出一个正整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的正整数。求这个新的正整数的最大值。
输入
输入一个正整数N和K,输出新的正整数。例如:N=1990,K=1,输出9190;N=101,K=0,输出101;N= 9090000078001234,K= 6,输出9907000008001234。
输出
输出新的数字
样例输入输出
样例输入
1990 1
101 0
9090000078001234 6
样例输出
9190
101
9907000008001234
代码详解
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[30];
int k,m;
while(~scanf("%s",a))
{
scanf("%d",&k);
int s;
for(int i=0; i<strlen(a)&&k>0 ; i++)
{
char b=a[i];
// 在i..i+k区间内取最大值
for(int j=i+1; j<=i+k&&j<strlen(a); j++)
{ // a[j]-'0' 转化为数字进行比较
if(a[j]-'0'>b-'0')
{
b=a[j];
s=j;
}
}
if(b!=a[i])
{ // s-i表示需要走的步数
k-=s-i;
for(int j=s; j>i; j--)
{
swap(a[j],a[j-1]);
}
}
}
printf("%s\n",a);
}
}