Codeforces Round #513 B. Maximum Sum of Digits(思維)
阿新 • • 發佈:2018-12-13
題意是輸入一個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; }