寻找最大数(三)
时间限制: 1 Sec 内存限制: 64 MB[提交][状态][讨论版]
题目描述
给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数。
求这个新的整数的最大值是多少。
输入
多组测试数据。 每组测试数据占一行,每行有两个数N和K (1 ≤ N≤ 10^18; 0 ≤ K ≤ 100).
输出
每组测试数据的输出占一行,输出移动后得到的新的整数的最大值。
样例输入
1990 1
100 0
9090000078001234 6
样例输出
9190
100
9907000008001234
题目分析:该题的转换次数可能大于数据的位数,要防止运行错误,从数据的起始位 i 开始在可以转化的次数内,找比它大的数,然后一一交换然后用总次数减去交换次数,然后在从第二位开始 i++,直到可交换的次数为0或者i==数据的位数结束
代码如下:
# include<stdio.h>
# include<string.h>
int main(){
char a[205];
int n;
while(~scanf("%s %d",a,&n))
{
int len=strlen(a);
for(int i=0;i<len&&n;i++)
{
int k=i;
for(int j=k;j<len&&j<=i+n;j++) //从 i 开始在可以转化的次数内,找比它大的数
{
if(a[j]>a[k])
k=j;
}
for(int j=k;j>i;j--) //交换
{
n--; //交换一次次数减一
char temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
printf("%s\n",a);
}
return 0;
}