贪心算法——另一种找最大值情况

在不超过K次移动的情况下,通过贪心算法将整数N中较大的数字尽可能移动到高位,以求得新的最大整数值。文章提供了解决此问题的思路和代码实现,包括从高位开始寻找最大值并进行移动的过程,展示了如何处理不同测试用例。
摘要由CSDN通过智能技术生成

寻找最大数(三)
时间限制: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

思考方法:整体思路是我们要把大的数字在不超过可移动步数的情况下尽可能地往前移动,使其成为高位上的数字。在给定了可移动步数K的情况下,这一次的移动就只能是在前K个数字里去找了。所以思路比较清晰,从最高位开始,在前K个数字里找到最大值,使其移动到最高位;然后开始找下一位,这次找的位数范围是(K减去刚才已经移动了的步数),找到最值后还是移动到最前边来,然后K再减去移动的步数,直到K变为了0,或者已经查找到了最末端。

代码如下:

#include<stdio.h>
#include<string.h&g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值