题目链接:http://codeforces.com/contest/1060/problem/B
题意是输入一个n,从1-n中找两个数,使得a+b=n,而且S(a)+S(b)的值是所有两个数中最大的。S函数求的是一个数每一位上的数字之和,比如S(123) = 1 + 2 + 3。
思路算是贪心吧,为了让S(a)+S(b)的值最大,所以我们要让a里尽量多的包含9,这样就能求出最大的S(a)+S(b),我的写法是比如n是345,然后我就让a等于299,b等于345-299;如果n是12345,那就让a等于9999,b等于12345-9999...
AC代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ll n;
string str;
cin>>n;
str = to_string(n);
int len = str.length();
if(len == 1){
cout<<n<<endl;
return 0;
}
int flag = 0;
for(int i=1;i<len;i++){
if(str[i] != '0'){
flag = 1;
break;
}
}
if(flag == 0){
cout << 9 * (len - 1) + (str[0] - '0')<<endl;
}
else{
ll x = (str[0] - '0') - 1;
for(int i=1;i<len;i++){
x *= 10;
x += 9;
}
ll y = n - x;
ll ans = 9 * (len - 1) + (str[0] - '0') - 1;
while(y){
ans += (y % 10);
y /= 10;
}
cout << ans << endl;
}
return 0;
}