CF1060B Maximum Sum of Digits


题目传送门

思路:

贪心:疯狂取 $9$ 就行了,保证数码值最大。

只要把 $a$ 给处理完,那么 $b$ 就是 $n-a$ 了。

详细的解释请看代码注释。

AC CODE:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,x,b,val=0;//m 和 x 都是 n 的替身,防止 n 的值改变; val 是 a 和 b 的数码值 
signed main(){
	cin>>n;
	m=x=n;//复制 
	while(x>=10)x/=10;//求出 n 的首位 
	int a=x-1;//想一下为什么 a 要先赋值为 x-1(思考题) 
	while(m){//求出 a 的最优解 
		m/=10;
		a=a*10+9;
	}
	a/=10;//多乘的要除回来 
	b=n-a;//b=n-a 
	while(a){
		val+=a%10;
		a/=10;
	}//a 的数码和 
	while(b){
		val+=b%10;
		b/=10;
	}//b 的数码和 
	cout<<val<<endl;//输出 
	return 0;//结束程序 
}

思考题答案:

为了保证 $a$ 和 $b$ 的数码和最大,就需要让 $a$ 和 $b$ 的位数最大,那么 $x-1$ 就能保证 $a$ 与 $b$ 的位数与 $n$ 相同或者小一位。


文章作者: alex_liu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 alex_liu !
  目录