链接: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。 思路: 让其中一个最大 求出结果就是最大的
#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; }
原文地址:https://www.cnblogs.com/chenchen-12/p/10166059.html
时间: 2024-10-03 15:48:03