列表

详情


NC21723. LLLYYY的数字思维

描述

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 ()。

输出描述

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

示例1

输入:

35
10000000000

输出:

17
91

说明:

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

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 2ms, 内存消耗: 296K, 提交时间: 2023-03-19 17:07:39

#include<bits/stdc++.h>
using namespace std;

int main(){
  int64_t c; 
  while (cin >> c) {
    int64_t t = 10;
    while (t-1<c) t*=10;
    t/=10;
    string s = to_string(t-1) + to_string(c-t+1);
    int tot = 0;
    for (auto ch: s) tot += ch-'0';
    cout << tot << endl;
  }
}

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 484K, 提交时间: 2018-12-23 16:04:05

#include <bits/stdc++.h>
using namespace std;
int S (long long x) {
	int ans=0;
	while(x) ans+=x%10,x/=10;
	return ans;
}
int main() {
	long long n;
	while(cin>>n) {
		long long A = 0;
        while(A*10+9 < n) A = A*10+9;
        cout<<S(A)+S(n-A)<<endl;
	}
	return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 344K, 提交时间: 2021-06-23 11:01:51

#include <stdio.h>
int main ()
{
	long long n,i,j,k;
	while(scanf("%lld",&n)!=EOF)
	{
		i=0;
		j=-1;
		k=0;
		while(n)
		{
			i=i+n%10;
			if(n%10==9&&k==0) j--;
			else k=1;
			n=n/10;
			j++;
		}
		if(k==0) j++;
		printf("%lld\n",i+9*j);
	}
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 452K, 提交时间: 2020-01-14 15:45:28

#include <iostream>
using namespace std;
int main()
{
	long long x,sum,a;
	while(cin>>x)
	{
		a=9;sum=0;
		while(x-a>0)
		{
			sum+=9;
			a=a*10+9;
		}
		x-=a/10;
		while(x>0)
		{
			sum+=x%10;
			x/=10;
		}
		cout<<sum<<endl;
	}
	return 0;
}

Python3(3.5.2) 解法, 执行用时: 29ms, 内存消耗: 3320K, 提交时间: 2020-01-17 23:51:41

def f(x):
    return sum([int(i) for i in list(str(x))])
while True:
    try:
        x=int(input())
        a=0
        while a*10+9<=x:
            a=a*10+9
        print(f(a)+f(x-a))
    except:
        break

上一题