1. 程式人生 > >Codeforces Round #513 B. Maximum Sum of Digits(思維)

Codeforces Round #513 B. Maximum Sum of Digits(思維)

       題意是輸入一個n,從1-n中找兩個數,使得a+b=n,而且S(a)+S(b)的值是所有兩個數中最大的。S函式求的是一個數每一位上的數字之和,比如S(123) = 1 + 2 + 3。

       思路算是貪心吧,為了讓S(a)+S(b)的值最大,所以我們要讓a裡儘量多的包含9,這樣就能求出最大的S(a)+S(b),我的寫法是比如n是345,然後我就讓a等於299,b等於345-299;如果n是12345,那就讓a等於9999,b等於12345-9999...

AC程式碼:

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

int main()
{
	ll n;
	string str;
	cin>>n;
	str = to_string(n);
	int len = str.length();
	if(len == 1){
		cout<<n<<endl;
		return 0;
	}
	int flag = 0;
	for(int i=1;i<len;i++){
		if(str[i] != '0'){
			flag = 1;
			break;
		}
	}
	if(flag == 0){
		cout << 9 * (len - 1) + (str[0] - '0')<<endl;
	}
	else{
		ll x = (str[0] - '0') - 1;
		for(int i=1;i<len;i++){
			x *= 10;
			x += 9;
		}
		ll y = n - x;
		ll ans = 9 * (len - 1) + (str[0] - '0') - 1;
		while(y){
			ans += (y % 10);
			y /= 10;
		}
		cout << ans << endl;
	}
	return 0;
}