sincerit LLLYYY的数字思维(9越多越好)

链接:https://ac.nowcoder.com/acm/contest/318/G
来源:牛客网

题目描述
LLLYYY很喜欢写暴力模拟贪心思维。某一天在机房,他突然抛给了队友ppq一
个问题。问题如下:
有一个函数f ():
int f(int x){
int tmp = 0;
while(x != 0){
tmp += x % 10;
x /= 10;
}
return tmp;
}
接着LLLYYY给定一个整数 c,要求在c范围内找两个整数a和b,使得a + b = c,且f(a) + f(b)的值最大。
输入描述:
采用多组输入方式。
每行输入一个整数 c (1≤c≤1012)。
输出描述:
对于每一个 c,找到一组 a,b ,使 f(a) + f(b)最大 且 a + b = c,输出这个f(a) + f(b)(0≤a,b≤c)。
示例1
输入
复制
35
10000000000
输出
复制
17
91
说明
在第一个样例中,可以选择 a = 17,b = 18,这样得到的f(a) + f(b)值最大为 17。
在第二个样例中, 可以选择 a = 5000000001,b = 4999999999.这样得到的f(a) + f(b)值最大为 91。

试了很多种方法,然后考虑到要使值越大,数字9越多值越大

#include <stdio.h>
typedef long long ll;
ll f(ll x) {
  ll sum = 0;
  while (x) {
    sum += x%10;
    x /= 10;
  }
  return sum;
}
int main() {
  ll t;
  while (~scanf("%lld", &t)) {
    // 109  99 + 10
    ll len = 0, k = t, sum = 0, s = 0;
    while (k) {
      k /= 10;
      len++;
    }
    len--;
    while (len--) {
      s = s * 10 + 9;
      sum += 9;
    }
    printf("%lld\n", f(t-s)+sum);
  }
  return 0;
}

猜你喜欢

转载自blog.csdn.net/sincerit/article/details/85223924