NYOJ 尋找最大數(三)

描述

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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章