题目大意
给定一个正整数 n n n,你可以将其每一位进行 + 1 , − 1 +1,-1 +1,−1 或是不变,问对 n n n 的每一位数字都进行一次操作后, n n n 的各个数位上数字之和是多少?
题目解法
很明显的贪心题,我们要想让各个数位的和最大,也就是让每一位数都尽可能的大(尽可能接近 9 9 9)。
我们可以分情况讨论:
- 若 n n n 的某一位为 0 0 0 时,此时我们对其进行操作 2 2 2,让其退位,变为 9 9 9。
- 若 n n n 的某一位为 9 9 9 时,此时我们进行操作 3 3 3,不需要变化。
- 若 n n n 的某一位位于 1 ∼ 8 1 \sim 8 1∼8 之间,此时我们进行操作 1 1 1,让其尽可能大。
还要注意特判一下 0 0 0,因为此时只能进行操作 1 1 1 和 操作 2 2 2,最大就是 1 1 1。
参考代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,T;
cin>>T;
while(T--){
int ans=0;
cin>>n;
if(n==0) cout<<"1\n";
else{
while(n>0){
if(n%10==0) n-=1;
else if(n%10>=1&&n%10<=8) n+=1;
ans+=n%10;
n/=10;
}
cout<<ans<<endl;
}
}
}