给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数。
求这个新的整数的最大值是多少。
- 输入
- 多组测试数据。
每组测试数据占一行,每行有两个数N和K (1 ≤ N≤ 10^18; 0 ≤ K ≤ 100). - 输出
- 每组测试数据的输出占一行,输出移动后得到的新的整数的最大值。
- 样例输入
-
1990 1 100 0 9090000078001234 6
- 样例输出
-
9190 100 9907000008001234
题目不难,只是一开始没有想到 最大移动次数k大于数N的长度的情况,提交的时候导致一直是RuntimeError。
#include <iostream> using namespace std; char a[100]; int main() { char maxn; int i=0,j,flag,k,place; while(cin>>a>>k){ maxn='0';place=0;flag=0; while(k>0){ // cout<<endl<<++q<<endl; // cout<<"k=="<<k<<endl; // cout<<"flag=="<<flag<<endl; for(i=flag;i<=flag+k&&a[i]!='\0';i++){ //寻找最大位置 if(a[i]>maxn){ maxn=a[i]; place=i; } } // cout<<"2---flag=="<<flag<<"place"<<place<<endl; for(j=place;j>flag;j--){ a[j]=a[j-1]; } a[flag]=maxn; // cout<<"1-a "<<a<<endl; maxn='0'; k-=(place-flag); // cout<<"place"<<place<<' '<<"place-flag"<<place-flag<<endl; // cout<<"k-=(place-flag) "<<k<<endl; flag++; if(a[flag]=='\0') break; } cout<<a<<endl; } return 0; }