LLLYYY的数字思维(模拟题)
Posted chenchen-12
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)的值最大。
个问题。问题如下:
有一个函数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
说明
在第一个样例中,可以选择 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 ",solve(Sum)+solve(Sum1)); } return 0; }
以上是关于LLLYYY的数字思维(模拟题)的主要内容,如果未能解决你的问题,请参考以下文章
CodeForces 1005D Polycarp and Div 3(思维贪心dp)
POJ 3923 Ugly Windows(——考察思维缜密性的模拟题)