题目大意:给出一整数s,整数n的每一位的数字都不相同,且,每一位数的数字加起来等于s,求符合条件的最小的n
1<=t<=45;1<=n<=45
思路:既然要最小那就要左边的位数上的数小,右边的位数上的数大,所以我们不妨从最右面以为开始考虑,从9到1依次放入,放入多少s相应减少多少,直到当前要减的数大于s
#include<bits/stdc++.h>
using namespace std;
int ans[15];
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
int cnt = 0;//记录有多少位
int now = 9;//从9到1依次减
while (n)
{
if (n >= now)
{
ans[++cnt] = now;
n -= now;
now--;//能坚持的话就令当前为为now,n减去now
}
else
{
ans[++cnt] = n;
break;//否则把当前剩余的n放入后结束
}
}
for (int i = cnt; i >= 1; i--)
{
printf("%d", ans[i]);
}
cout << endl;
}
return 0;
}