题目描述
给你一个n,你需要只用0或者1两个数凑出一些十进制数累加等于n,并且需要十进制数的个数最小,并且输出最小个数k,以及那些数构成的?
Solution
只用0或者1构建很容易发现最少的个数就是n当中最大的十进制位的大小。其他位不需要那么大直接补0即可,比较显然这个条件。
接下来只需要去模拟每一位的剩余个数即可,总体比较简单。
#include <cstdio> #include <algorithm> using namespace std; int num[10], cnt; int main() { int n, k = 0; scanf("%d", &n); while (n) { k = max(k, n % 10); num[++cnt] = n % 10; n /= 10; } printf("%d\n", k); for (int i = 1; i <= k; ++i) { int ans = 0; for (int j = cnt; j; --j) { ans = 10 * ans; if (num[j]) ans += 1, --num[j]; } printf("%d%c", ans, " \n"[i == k]); } return 0; }