多多的数字组合
多多君最近在研究某种数字组合:
定义为:每个数字的十进制表示中(0~9),每个数位各不相同且各个数位之和等于N。
满足条件的数字可能很多,找到其中的最小值即可。
多多君还有很多研究课题,于是多多君找到了你--未来的计算机科学家寻求帮助。
数据范围: 1≤N≤1000 1≤n≤1000
输入描述:
共一行,一个正整数N,如题意所示,表示组合中数字不同数位之和。 (1 <= N <= 1,000)
输出描述:
共一行,一个整数,表示该组合中的最小值。 如果组合中没有任何符合条件的数字,那么输出-1即可。
示例1
输入例子:
5
输出例子:
5
例子说明:
符合条件的数字有:5,14,23,32,41
其中最小值为5
示例2
输入例子:
12
输出例子:
39
例子说明:
示例3
输入例子:
50
输出例子:
-1
例子说明:
没有符合条件的数字 (T▽T)
#include <iostream>
#include <set>
using namespace std;
set<int> res;
void dfs(int num,int i,int &val){
if(num==i){
res.insert(10*val+i);
return;
}
if(num < i){
return;
}
//不选
if(i==9){
return;
}
dfs(num,i+1,val);
//选择
val=val*10+i;
dfs(num-i,i+1,val);
val=(val-i)/10;
}
int main(){
int N;
std::cin >> N;
int cnt=0;
dfs(N,1,cnt);
if(res.size()==0){
std::cout << -1 << std::endl;
}else{
std::cout << *res.begin() << std::endl;
}
return 0;
}