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;

} 

转载于:https://www.cnblogs.com/angle-qqs/p/4085016.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值