题目 2694: 蓝桥杯2022年第十三届决赛真题-最大数字【暴力解法】

最大数字

原题链接

🥰提交结果

思路

  • 对于每一位,我我们都要尽力到达 9

    所以我们去遍历每一位, 如果是 9 直接跳过这一位

    如果可以上调9 我们将这一位上调到 9 ,并且在a 中减去对应的次数

    同样的,如果可以下调9,我们将这一位下调到 9,并且在b中减去对应的次数

    如果上调和下调的次数都不够,就按找能加就加的原则

    ​ 例如:3->9 a=1 b=1

    • 3想要到达9上调的次数不足以使他到达9,同样下调也不行,这个时候,全加上就可以了,同时别忘记扣除对应次数。

这里要注意 ,并不是上调或下调到9的次数小就选次数少的,两种选法是不一定的:

  • 3327621916603411 7 9

    对于这个测试用例,每一位就可以存在两种操作,上调或者下调,两种都要试一遍 ,最后取得最大值是答案。(如果不考虑加和减的顺序,最后测试点通过情况只能拿97分亲身实践!)

代码

c 复制代码
#include <iostream>
#define int long long
using namespace std;

//特殊测试用例: 3327621916603411 7 9
inline string maxNum1(string st, int a, int b) {
	for (int i = 0; i < st.length(); i++) {
		int x = st[i] - '0';
		int up = 9 - x;									
		int down = x + 1;								
		if (x == 9) {									
			continue;
		} else if (up <= a) {		//能够上调
			x += up;
			a -= up;
		} else if (down <= b) { 	//能够下调			
			b -= down;
			x = 9;
		} else if (up > a) {	
			x += a;
			a = 0;
		} else if (a == 0 && b == 0) break;
		st[i] = x + '0';
	}
	return st;
}


inline string maxNum2(string st, int a, int b) {
	for (int i = 0; i < st.length(); i++) {
		int x = st[i] - '0';
		int up = 9 - x;								
		int down = x + 1;								
		if (x == 9) {								
			continue;
		} else if (down <= b) { 			
			b -= down;
			x = 9;
		} else if (up <= a) {	
			x += up;
			a -= up;
		} else if (up > a) {		
			x += a;
			a = 0;
		} else if (a == 0 && b == 0) break;
		st[i] = x + '0';
	}
	return st;
}

inline string findMax(string a, string b) {
	if (a > b) return a;
	else return b;
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int a, b;
	string st;
	cin >> st;
	cin >> a >> b;
	st = findMax(maxNum1(st, a, b), maxNum2(st, a, b));
	cout << st << endl;
}	
相关推荐
民乐团扒谱机12 小时前
【读论文】引力与惯性的起源:从全息原理到牛顿定律与爱因斯坦方程
算法·量子力学··万有引力·爱因斯坦方程·全息原理·牛顿定律
努力学算法的蒟蒻12 小时前
day84(2.13)——leetcode面试经典150
算法·leetcode·面试
@––––––12 小时前
力扣hot100—系列8-回溯算法
javascript·算法·leetcode
!停12 小时前
数据结构二叉树—堆(2)&链式结构(上)
数据结构·算法
C++ 老炮儿的技术栈12 小时前
万物皆文件:Linux 抽象哲学的开发之美
c语言·开发语言·c++·qt·算法
im_AMBER12 小时前
Leetcode 120 求根节点到叶节点数字之和 | 完全二叉树的节点个数
数据结构·学习·算法·leetcode·二叉树·深度优先
1027lonikitave12 小时前
FFTW的expr.ml怎么起作用
算法·哈希算法
TracyCoder12312 小时前
LeetCode Hot100(54/100)——215. 数组中的第K个最大元素
算法·leetcode·排序算法
柏木乃一12 小时前
Linux进程信号(1):信号概述,信号产生part 1
linux·运维·服务器·c++·信号·signal
colicode12 小时前
C++语音验证码接口API示例代码详解:高性能C++语音校验接入Demo
前端·c++·前端框架·语音识别