C. Unique Number - CF1462C
阿新 • • 發佈:2020-12-21
題意:
給出一個數字x,讓你找出一個由1到9這九個數字組成的數字,這個數字的每一位加起來等於x,並且1到9每個數字只能出現一次。若能找到這樣的數字,輸出這其中最小的一個,否則輸出-1。
思路:
利用二進位制列舉,列舉每個1到9這九個數字是否出現。每次列舉若和等於x,則將被選中的數字從小到大排列,取得到的數字中最小的一個。若全部列舉完之後並沒有找到符合要求的數字,則不存在這樣的數字。由於列舉9個數字是否出現,所以最壞情況是\(2^9\),也就是\(1e3\)的複雜度,必然不會超時。
AC程式碼:
#include <cstdio> #include <algorithm> const int inf = 0x3f3f3f3f; int main () { int T, x; scanf ("%d", &T); while (T--) { scanf ("%d", &x); int ans = inf; for (int i = 0; i < (1 << 9); i++) { int t = 0, s = 0; for (int j = 0; j < 9; j++) { if (i & (1 << j)) { t = t + j + 1; s = s * 10 + j + 1; } } if (t == x) { ans = std::min(ans, s); } } printf ("%d\n", ans == inf ? -1 : ans); } return 0; }