欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C. Unique Number

程序员文章站 2022-05-21 08:32:36
...

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;
}