https://codeforces.ml/contest/1462/problem/C
题意:给你个数字x,让你去找一个整数t,满足t的各个位上的数字之和等于x,同时各个位上的数字互不相同。找得到就输出最小的t,找不到就输出-1。
注意到各个位上的数字互不相同,所以t最多是9位,由123456789组成,因此x的上限就是1+2+3…+9=45,超过45就找不到,输出-1。
接下来解决x<=45的情况。我们开个数组a,取max=9,对于每次操作,只要x>max,就让x-max,把max存进数组中,然后max-1(因为不能相同),重复这样的操作直到x<=max。然后把数组a倒着输出就行(因为要使t尽可能小)。
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int x;
cin >> x;
if (x > 45)
cout << "-1" << endl;
else {
int max = 9;
int a[10];
int k = 0;
while (1) {
if (x <= max) {
a[k] = x;
break;
}
if (x > max) {
a[k] = max;
x -= max;
max--;
k++;
}
}
for (int i = k; i >= 0; i--) {
cout << a[i];
}
cout << endl;
}
}
return 0;
}