給出一個整數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;
}