码迷,mamicode.com
首页 > 其他好文 > 详细

LLLYYY的数字思维(模拟题)

时间:2018-12-24 02:59:37      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:while   sum   tps   tar   element   return   can   div   tmp   

链接: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;
}

 

LLLYYY的数字思维(模拟题)

标签:while   sum   tps   tar   element   return   can   div   tmp   

原文地址:https://www.cnblogs.com/chenchen-12/p/10166059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!