题干:
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≤10121≤c≤1012)。
输出描述:
对于每一个 c,找到一组 a,b ,使 f(a) + f(b)最大 且 a + b = c,输出这个f(a) + f(b)(0≤a,b≤c0≤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,剩下一个数直接减就行了。
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
int f(ll x) {
int res = 0;
while(x) {
res += x%10;
x/=10;
}
return res;
}
ll c;
int main()
{
while(~scanf("%lld",&c)) {
ll cur = 0;
while(1) {
if(cur*10 + 9 > c) break;
cur =cur*10 + 9 ;
}
printf("%d\n",f(cur) + f(c-cur));
}
return 0 ;
}
题干:
因为gugugu非常喜欢9这个数字所以他希望把数字n变得末尾有尽可能多的9,不过他只能把n减小,且减小的数值不超过k,因为gugugu太菜了不会做这个题,所以需要你们帮他解答。
输入描述:
多组数据输入,第一行输入一个整数n代表需要变换的数,和一个整数k代表最大能减少的数值。(1 ≤ n ≤ 1018,0 ≤ k < n)
提示:OJ的测评机使用%lld输出64位整型(即long long).若你写代码的系统为XP,在XP上运行程序测样例时要改成%I64d才能正常输出,但是提交到OJ上的时候必须改回%lld,因为OJ不是xp系统的。
输出描述:
输出以最大数量的9在末尾且满足条件的数,如果有多个满足条件请输出最大的一个。
示例1
输入
127 30
4521 89
输出
99
4499
解题报告:
因为题目说的很清楚,是末尾要最多的9,也就是中间断开就不行,所以我们从后往前贪心构造9就行了,注意如果本来就全是9的话那就直接判断下一位。
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
ll n,k,ans;
int main()
{
while(~scanf("%lld%lld",&n,&k)) {
ans = 0;
for(ll i = 10; i<=n; i*=10) {
ll tmp = n%i;//取前几位
tmp++;
if(tmp>k) break;
if(tmp == i) continue;
ans = tmp;
}
printf("%lld\n",n - ans);
}
return 0 ;
}
总结:
注意这两个题的构造区别就是了。