关闭

NYOJ 1057 寻找最大数(三)

280人阅读 评论(0) 收藏 举报
分类:

寻找最大数(三)

时间限制: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
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 100 + 10;

char str[20];
int k;
int main()
{
    while (scanf("%s%d", str, &k) != EOF){
        int len = strlen(str);
        int t;
        for (int i = 0; i < len && k != 0; i++){
            t = i;
            for (int j = i + 1; j <= i + k && j < len; j++){   //贪心,从i+1到i+k寻找最大的数 并记录下序号 
                if (str[j] > str[t])
                    t = j;
            }
            for (int j = t; j > i; j--){
                swap(str[j], str[j - 1]);
            }
            k -= t - i;
        }
        printf("%s\n", str);
    }
    return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:212515次
    • 积分:5842
    • 等级:
    • 排名:第4385名
    • 原创:396篇
    • 转载:57篇
    • 译文:0篇
    • 评论:14条