多多的数字组合题解
分析:
- 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;
}