现在的位置: 首页 > 综合 > 正文

NYOJ 寻找最大数(三)

2017年06月08日 ⁄ 综合 ⁄ 共 849字 ⁄ 字号 评论关闭
描述

给出一个整数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;
}

抱歉!评论已关闭.