多多的数字组合题解

分析

  • 1,2,3,4,5,6,7,8,9最多和为45,所以大于45输出-1小于10直接输出10到45一定有答案
  • 右边的数越大,结果越小。因为不同位数的话,位数越多,结果越大(1234>19)。同等位数,大的数要先选来确保最后选的数足够小(678>489)。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int sol(int n)
{
    int res=0;
    if(n>45)    return -1;
    if(n<10)    return n;
    vector<int> vec;
    for(int i=9;i>=1;i--)
        if(n&&n>=i)
        {
            n-=i;
            vec.push_back(i);
        }
    while(vec.size())
    {
        res=res*10+vec.back();
        vec.pop_back();
    }
    return res;
}

int main()
{
    int n,res=0;
    cin>>n;
    cout<<sol(n)<<endl;
}