1. 程式人生 > >sincerit LLLYYY的數字思維(9越多越好)

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; }