首页 > 代码库 > NYOJ-1057-寻找最大数(三)

NYOJ-1057-寻找最大数(三)

http://acm.nyist.net/JudgeOnline/problem.php?pid=1057

 

 

寻找最大数(三)

时间限制: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 <stdio.h>
#include <string.h>

char str[20], temp;

int main(){
    int k, len, i, flag1, flag2;
    while(scanf("%s %d", str, &k) != EOF){
        len = strlen(str);
        flag1 = flag2 = 0;
        while(k > 0){
            if(flag1 == len){   //忘了这个TLE到死
                break;
            }
            for(i = flag1; i <= flag1 + k && i < len; i++){
                if(str[i] > str[flag2]){
                    flag2 = i;
                }
            }
            if(flag2 > flag1){
                k -= (flag2 - flag1);
                for(i = flag2; i > flag1; i--){
                    temp = str[i];
                    str[i] = str[i - 1];
                    str[i - 1] = temp;
                }
            }
            flag1++;
            flag2 = flag1;
        }
        puts(str);
    }
    return 0;

} 

NYOJ-1057-寻找最大数(三)