LLLYYY的数字思维(模拟题)

链接: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 ( 1c1012)。

输出描述:

对于每一个 c,找到一组 a,b ,使 f(a) + f(b)最大 且 a + b = c,输出这个f(a) + f(b)(0a,bc)。
示例1

输入

复制
35
10000000000

输出

复制
17
91

说明

在第一个样例中,可以选择 a = 17,b = 18,这样得到的f(a) + f(b)值最大为 17。
在第二个样例中, 可以选择 a = 5000000001,b = 4999999999.这样得到的f(a) + f(b)值最大为 91。



思路: 让其中一个最大 求出结果就是最大的

#include<bits/stdc++.h>
 
using namespace std;
long long solve(long long n)
{
    long long sum=0;
    while(n){
        sum+=n%10;
        n/=10;
    }
    return sum;
}
int main()
{
    long long n;
    while(scanf("%lld",&n)==1){
        long long t=n;
        int len=0;
        while(t){
            len++;
            t/=10;
        }
        long long Sum=0;
        for(int i=0;i<len-1;i++){
            Sum=Sum*10+9;
        }
        long long Sum1=n-Sum;
        printf("%lld\n",solve(Sum)+solve(Sum1));
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/chenchen-12/p/10166059.html