寻找最大数 1057
给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数。
求这个新的整数的最大值是多少。
输入多组测试数据。每组测试数据占一行,每行有两个数N和K (1 ≤ N≤ 10^18; 0 ≤ K ≤ 100).输出每组测试数据的输出占一行,输出移动后得到的新的整数的最大值。样例输入
1990 1
100 0
9090000078001234 6
|
9190
100
9907000008001234
|
#include<stdio.h>
#include<string.h>
int main()
{
char a[1000];
int k;
while((scanf("%s%d",a,&k))!=EOF)
{
int i,h,j,m;
h=strlen(a);
if(k==0)
{
puts(a);
continue;
}
for(i=0;i<h-1 ;i++)
{
char max=a[i]; //假定首位最大
m=i; //做个标记
for(j=i+1;j<=i+k;j++) //在保证不超过k步的情况下,寻找比首位大的值
{
if(j==h) //如果j等于h,那么就不用比了
break;
if(max<a[j])
{
max=a[j]; //找到之后修改最大值
m=j; //做标记
}
}
for(int o=m;o>i && k;o--) //在k>0的情况下,一步一步的移动
{
char t=a[o];
a[o]=a[o-1];
a[o-1]=t;
k--; //每移一步,k--
}
if(k==0 ) //k==0,结束
break;
}
puts(a);
}
return 0;
}
每天一点点,便会积少成多!!!