题目描述

给你一个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;
}