寻找最大数(三)
时间限制:
1000
ms
|
内存限制:
65535
KB
难度:
2
-
描述
-
给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数。
求这个新的整数的最大值是多少。
-
-
输入
-
多组测试数据。
每组测试数据占一行,每行有两个数N和K (1 ≤ N≤ 10^18; 0 ≤ K ≤ 100).
输出
- 每组测试数据的输出占一行,输出移动后得到的新的整数的最大值。 样例输入
-
1990 1
-
100 0
-
9090000078001234 6
样例输出
-
9190
-
100
-
9907000008001234
这道题我采用了递归调用的方法,把每一步找到的最大数放到最前面。然后计算出移动前和移动后的下标之差,让k减去这个数,就是剩下的移动次数。然后再次调用函数。 - 这道题我错了好几次都是runtime error ,后来发现是数组越界,修改了一下控制条件就AC了~~
-
AC代码如下:
#include<iostream> #include<cstring> using namespace std; char s[100]; char t,maxs; int i,j,mi,k,l; void ex(char s[],int k,int j) { if(!k||j>=l) { cout<<s<<endl; return; } maxs=s[ j ]; mi=j; for(i=j;i<=j+k;i++) { if(i>=l) break; else if(s[ i ]>maxs) { maxs=s[ i ]; mi=i; } } for(i=mi-1;i>=j;i--) { t=s[ i ]; s[ i ]=s[i+1]; s[i+1]=t; } k-=mi-j; j++; ex(s,k,j); } int main() { while(cin>>s>>k) { l=strlen(s); j=0; ex(s,k,j); } }
-
多组测试数据。