题目大意:给出一整数s,整数n的每一位的数字都不相同,且,每一位数的数字加起来等于s,求符合条件的最小的n
1<=t<=45;1<=n<=45
思路:既然要最小那就要左边的位数上的数小,右边的位数上的数大,所以我们不妨从最右面以为开始考虑,从9到1依次放入,放入多少s相应减少多少,直到当前要减的数大于s
- #include
- 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;
- }